MySQl - обновить поле путем подсчета данных в другой таблице - PullRequest
0 голосов
/ 31 марта 2010

Есть две таблицы. Один - информация о пользователях «пользователи», один - информация о комментариях «комментарии».

Мне нужно создать новое поле «комментарии» в таблице пользователей, которое содержит количество комментариев этого пользователя. Таблица "comments" имеет поле "user" с идентификатором пользователя этого комментария.

Каков оптимальный способ подсчета количества комментариев каждого пользователя на данный момент?

С помощью php вы должны написать скрипт, который выбирает каждого пользователя и затем подсчитывает количество его комментариев, а затем обновляет поле «Комментарии» Это не сложно для меня, но скучно.

Можно ли сделать это без php, только в MySQL?

Ответы [ 3 ]

2 голосов
/ 31 марта 2010
UPDATE TABLE users SET CommentCount = (SELECT COUNT(*) FROM comments WHERE AuthorUserId = users.id)
1 голос
/ 31 марта 2010

Да, это возможно. Это называется table joining. Вы добавляете не другое поле в таблицу users, а в таблицу resulting.

SELECT users.*, count(comments.id) as num_comments 
FROM users,comments 
WHERE comments.cid=users.id 
GROUP BY users.id

Такой запрос - то, для чего было изобретено relational databases. Не возвращайте его в состояние обычного текстового файла. Есть много причин, чтобы сделать это таким образом.
http://en.wikipedia.org/wiki/Database_normalization <- хороший текст для чтения </p>

1 голос
/ 31 марта 2010

Почему вы хотите хранить его там в любом случае? Почему бы просто не показать это комбинированный запрос?

select users.name, count(comments.id) as comment_count
from users
join comments on users.id=comments.user_id
group by users.id

Если вы хотите сделать это по-своему, включите

update users set comment=comment+1 where id=$user_id

в скрипт, где вы храните комментарий.

И

update users set comment=comment-1 where id=$user_id

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

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