MySQL вычитает несколько раз для одной и той же строки в обновлении - PullRequest
0 голосов
/ 02 ноября 2010

У меня есть таблица комментариев и таблица сообщений

Всякий раз, когда сообщение удаляется, выполняется запрос, чтобы вычесть количество комментариев (которые будут удалены позже) из каждого комментария пользователя

Таким образом, если у пользователя есть 2 комментария в сообщении, и это сообщение удалено, их баланс должен иметь 2 вычтенных из него

Мой запрос выглядит следующим образом:

    UPDATE users 
INNER JOIN comment ON users.id = comment.author 
       SET comment_count = comment_count - 1 
     WHERE comment.post = 1

У пользователя A есть 2 комментария с .post = 1, но по какой-то причине пользователь получает только значение comment_count, вычитаемое 1 раз, когда это должно произойти дважды

Я думаю, что мой синтаксис правильный, потому что когда я:

    SELECT * 
      FROM users 
INNER JOIN comment ON users.id = comment.author 
     WHERE comment.post = 1

Я получаю два результата для пользователя A

Разве UPDATE не должен повторять эти два результата, вычитая каждый раз?

Может кто-нибудь объяснить, чего мне не хватает? спасибо

1 Ответ

1 голос
/ 02 ноября 2010

Если вы собираетесь сохранить счет, используйте:

UPDATE USERS
   SET comment_count = (SELECT COUNT(*)
                          FROM COMMENT c
                         WHERE c.author = USERS.id)

... или:

UPDATE USERS u
  JOIN (SELECT c.author,
               COUNT(*) AS numComments
          FROM COMMENT c
      GROUP BY c.author) x ON x.author = u.id
   SET comment_count = x.numComments

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

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

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