Как добавить количество строк первой таблицы в другую с условием - PullRequest
0 голосов
/ 10 ноября 2018

Есть две таблицы:

####comments####     ####news######
#cid#news_id#         #id##comm_num#  
#1##1#               #1###2#
#2##1#               #2###1#
#3##2#               #3###3#

Я пытаюсь посчитать и поместить количество комментариев из таблицы 'comments' в таблицу 'news', но я получаю неправильный результат. Почему?

UPDATE news JOIN comments ON news.id = comments.news_id SET 
news.comm_num = ( SELECT COUNT( * ) 
FROM comments WHERE comments.news_id > 123)
WHERE news.id > 123

'comments.news_id' = 'id' прокомментированных новостей из таблицы 'news'

Я написал рабочее решение для конкретных случаев, но не могу понять, как сделать запрос с условием, большим, чем.

UPDATE news a 
SET comm_num = (SELECT COUNT(*) 
                FROM comments c 
                WHERE c.news_id = 123) 
WHERE a.id = 123 

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы можете получить общее количество комментариев к новостям, используя Производная таблица . Присоедините это обратно к таблице 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)
0 голосов
/ 10 ноября 2018

Просто используйте коррелированный подзапрос:

UPDATE news n 
    SET comm_num = (SELECT COUNT(*) 
                    FROM comments c 
                    WHERE c.news_id = n.id
                   ) ;

Я не уверен, для чего нужно условие WHERE news.id > 123.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...