3

我正在寻找一种方法来计算 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 现场演示

条件:

  • 每个用户可以有几个新闻
  • 每个新闻都可以有几
  • 每个新闻都可以有几个同伴(同伴是用户)
  • 每个用户都可以为几条新闻投票(对于这个查询并不重要)

目标:

现在我试图弄清楚一个用户总共有多少票:在他自己的新闻上,他作为同伴链接在一起。解决方案应该是单个MySQL 查询。

用户 2的示例:

  • User21篇新闻文章。这篇新闻文章有2票。
  • User21篇文章的伴侣。这篇新闻文章有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
4

1 回答 1

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;
于 2013-11-08T15:30:04.047 回答