Как я могу обновить столбец оценки в таблице A, используя количество записей из таблицы B? - PullRequest
1 голос
/ 27 января 2011

У меня есть таблица posts и таблица likes.Многим пользователям может понравиться пост.Таблица posts имеет денормализованный столбец likesScore, представляющий число likes, которое имеет сообщение.Я хотел бы обновить таблицу posts.likesScore, выполнив COUNT(*) для таблицы likes @postId.

У меня есть идея, как это сделать, но я не могу получить синтаксиссправа:

UPDATE posts
SET likesScore = ...
WHERE posts.id = @postId

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Операторы MySQL UPDATE поддерживают JOINs - используйте:

UPDATE POSTS p 
       JOIN (SELECT t.postid,
                    COUNT(*) AS cnt
               FROM LIKES t
           GROUP BY t.postid) l ON l.postid = p.postid
   SET likesscore = l.cnt

Стандартным способом является использование подзапроса, но это требует корреляции в подзапросе и фильтрацияв предложении WHERE - в противном случае существует риск обновления записей, на которые нет ссылок во вспомогательных таблицах.

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

1 голос
/ 27 января 2011
UPDATE posts
SET likesScore = (SELECT count(*) FROM likes WHERE likes.id=posts.id)
WHERE ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...