我正在寻找一种计算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查询。
User2 的示例:
方法
以下查询结果是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
答案 0 :(得分:3)
不加入,工会是关键。请注意,您必须两次更改user_id。随意加入用户表以获取真实的用户名。
看到它在sqlfiddle中正常工作。
SELECT u.user_name,
count(*)
FROM
(
SELECT news_id,
user_id
FROM news
WHERE user_id = 2
UNION ALL
SELECT news_id,
user_id
FROM companion
WHERE user_id = 2
) sq
JOIN vote v
ON v.news_id = sq.news_id
JOIN user u
ON sq.user_id = u.user_id
GROUP BY sq.user_id;