Вопрос

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

Запись таблицы:

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))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top