Вы можете получить общее количество комментариев к новостям, используя Производная таблица . Присоедините это обратно к таблице news
на news_id
и обновите значения соответственно.
Мы используем LEFT JOIN
для обработки случая, когда нет комментариев к новостям. И, функция Coalesce()
используется для изменения null
на 0 (в случае отсутствия комментариев).
UPDATE news a
LEFT JOIN (SELECT news_id, COUNT(*) AS comm_num
FROM comments
GROUP BY news_id) b
ON b.news_id = a.id
SET a.comm_num = COALESCE(b.comm_num,0)
Если вы хотите обновить только те news
, где id
больше 123; Вы можете добавить условия следующим образом:
UPDATE news a
LEFT JOIN (SELECT news_id, COUNT(*) AS comm_num
FROM comments
WHERE news_id > 123 -- add condition to Derived Table
GROUP BY news_id) b
ON b.news_id = a.id
WHERE a.id > 123 -- add condition here also to avoid updating id <= 123
SET a.comm_num = COALESCE(b.comm_num,0)