我正在寻找一种方法来计算 MySQL 数据库中用户的投票。
表和列:
companion
- companion_id
- news_id
- user_id
news
- news_id
- user_id
user
- user_id
- user_name
vote
- vote_id
- news_id
- user_id
条件:
- 每个用户可以有几个新闻
- 每个新闻都可以有几票
- 每个新闻都可以有几个同伴(同伴是用户)
- 每个用户都可以为几条新闻投票(对于这个查询并不重要)
目标:
现在我试图弄清楚一个用户总共有多少票:在他自己的新闻上,他作为同伴链接在一起。解决方案应该是单个MySQL 查询。
用户 2的示例:
- User2有1篇新闻文章。这篇新闻文章有2票。
- User2是1篇文章的伴侣。这篇新闻文章有3票。
- User2应该有5票
方法:
以下查询结果为 31 而不是 5,因为它无法将其分组到 2 个不同的表中。
SELECT u.user_name,
u.user_id,
COUNT(v.vote_id) AS votes
FROM user u,
news n,
companion c,
vote v
WHERE u.user_id = 2 AND
(
(
u.user_id = n.user_id AND
n.news_id = v.news_id
) OR
(
u.user_id = c.user_id AND
c.news_id = v.news_id
)
)
GROUP BY u.user_id
LIMIT 1