MySQL:为用户计算投票数

时间:2013-11-08 14:12:19

标签: mysql

我正在寻找一种计算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

查看 SQL Fiddle Live Demo

条件:

  • 每个用户都可以有多个新闻
  • 每个新闻可以有多个投票
  • 每个新闻可以有多个随播广告(随播广告是用户)
  • 每个用户都可以投票支持多个新闻(对此查询不重要)

:定位:

现在我想弄清楚一个用户在一起的票数:在他自己的新闻中,他作为伴侣链接。解决方案应该是单个 MySQL查询。

User2 的示例:

  • 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

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;