MySQL обновление с внедовочным
-
24-10-2019 - |
Вопрос
Привет, у меня есть такие столы, как это:
Запись таблицы:
id | total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0
Комментарии таблицы:
id | Ид | комментарий
_____________________
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))
Результаты, которые я получаю:
Запись таблицы:
id | total_comments
_____________________
1 | 1
2 | 1
3 | 0
4 | 0
Ожидаемые результаты :
Запись таблицы:
id | 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.
Это именно то, что я ожидал. Идентификатор находится в наборе, который вы его даете, поэтому Total_comments = total_comments + 1.
Это не будет добавлять один для каждого экземпляра одного и того же значения: это не так, как работает. Вернут простой логический, да/нет.
Пытаться:
UPDATE entry
SET total_comments = (SELECT COUNT(*)
FROM comments
WHERE entry.id = comments.eid
GROUP BY id)
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))