Существует таблица latest_comments
, которая перезаписывается каждые N минут.Содержимое извлекается из таблиц posts
и comments
и объединяется.Существует 3 различных категории (красный, зеленый, синий), где 10 последних комментариев от каждой категории должны быть представлены в latest_comments
.
Без объединения / объединения запрос выглядит так:
INSERT INTO `latest_comments` (`post_id`, `comment_id`, `date`, `comment`, `category`)
SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'red'
ORDER BY c.date DESC
LIMIT 0, 10;
INSERT INTO `latest_comments` (`post_id`, `comment_id`, `date`, `comment`, `category`)
SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'green'
ORDER BY c.date DESC
LIMIT 0, 10;
INSERT INTO `latest_comments` (`post_id`, `comment_id`, `date`, `comment`, `category`)
SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'blue'
ORDER BY c.date DESC
LIMIT 0, 10;
Как объединить все 3 запроса SELECT, чтобы можно было использовать только 1 запрос INSERT, сохраняя при этом его максимально возможную оптимизацию в отношениипроизводительности?
Я перепробовал все, что мог найти, и все, что мог, попытаться придумать свою логику.Ни один из них не сработал, и я думаю, что 3 отдельных запроса INSERT замедляют работу функции.То, что я хотел бы работать, например:
INSERT INTO `latest_comments` (`post_id`, `comment_id`, `date`, `comment`, `category`)
(SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'red'
ORDER BY c.date DESC
LIMIT 0, 10),
(SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'green'
ORDER BY c.date DESC
LIMIT 0, 10),
(SELECT
p.id AS `post_id`,
c.post_id AS `comment_id`,
c.date AS `date`,
c.comment AS `comment`,
p.category AS `category`
FROM `comments` AS c
LEFT JOIN `posts` AS p
ON c.post_id = p.id
WHERE p.category = 'blue'
ORDER BY c.date DESC
LIMIT 0, 10);