Привет у меня есть таблицы как это:
запись в таблице:
идентификатор | 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
Любая справка будет цениться.
Использование:
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))
Если вам действительно нужно занести total_comments в отдельную таблицу, я бы сделал это ПРОСМОТР.
CREATE VIEW entry AS
SELECT id, COUNT(comments) AS total_comment
FROM comments
GROUP BY id
Таким образом, вы полностью избегаете задачи обслуживания по обновлению таблицы total_comments.
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))
Это именно то, чего я ожидал. Идентификатор находится в том наборе, который вы ему даете, поэтому total_comments = total_comments + 1.
Он не собирается добавлять по одному для каждого экземпляра одного и того же значения: IN работает не так. IN вернет простое логическое значение да / нет.
Попробуйте:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM comments
WHERE entry.id = comments.eid
GROUP BY id)