ОБНОВЛЕНИЕ MySQL с В и подзапрос

Привет у меня есть таблицы как это:

запись в таблице:

идентификатор | total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0

комментарии таблицы:

идентификатор | eid | комментарий
_____________________
1 | 1 | комментируют sdfd
2 | 1 | тестирующий тестирование
3 | 1 | текст комментария
4 | 2 | фиктивный комментарий
5 | 2 | демонстрационный комментарий
6 | 1 | fg fgh dfh

Запрос я пишу:

UPDATE entry 
   SET total_comments = total_comments + 1 
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

Результаты, которые я получаю:

запись в таблице:

идентификатор | total_comments
_____________________
1 | 1
2 | 1
3 | 0
4 | 0

Ожидаемые результаты:

запись в таблице:

идентификатор | total_comments
_____________________
1 | 4
2 | 2
3 | 0
4 | 0

Любая справка будет цениться.

10
задан dreftymac 12 June 2019 в 21:50
поделиться

5 ответов

Использование:

UPDATE entry 
   SET total_comments = (SELECT COUNT(*)
                           FROM COMMENTS c
                          WHERE c.eid = id
                       GROUP BY c.eid)
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))
19
ответ дан 3 December 2019 в 16:51
поделиться

Если вам действительно нужно занести total_comments в отдельную таблицу, я бы сделал это ПРОСМОТР.

CREATE VIEW entry AS 
  SELECT id, COUNT(comments) AS total_comment 
  FROM comments 
  GROUP BY id

Таким образом, вы полностью избегаете задачи обслуживания по обновлению таблицы total_comments.

3
ответ дан 3 December 2019 в 16:51
поделиться
UPDATE entry e 
    SET total_comments = ( SELECT COUNT(*) FROM comments WHERE eid = e.id)  
    WHERE 
    e.id in (SELECT eid FROM comments WHERE id IN (1,2,3,4,5,6))
0
ответ дан 3 December 2019 в 16:51
поделиться

Это именно то, чего я ожидал. Идентификатор находится в том наборе, который вы ему даете, поэтому total_comments = total_comments + 1.

Он не собирается добавлять по одному для каждого экземпляра одного и того же значения: IN работает не так. IN вернет простое логическое значение да / нет.

1
ответ дан 3 December 2019 в 16:51
поделиться

Попробуйте:

UPDATE entry
  SET total_comments = (SELECT COUNT(*) 
                        FROM comments
                        WHERE entry.id = comments.eid
                        GROUP BY id)
1
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: