MySQL:为用户统计选票

MySQL:为用户统计选票,mysql,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 查看 条件: companion - companion_id - news_id - user_id news - news_id - u

我正在寻找一种在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
查看

条件:

companion
 - companion_id
 - news_id
 - user_id
news
 - news_id
 - user_id
user
 - user_id
 - user_name
vote
 - vote_id
 - news_id
 - user_id
  • 每个用户都可以有几个新闻
  • 每一条新闻都有好几票
  • 每个新闻都可以有几个同伴(同伴是用户)
  • 每个用户都可以为多条新闻投票(对于此查询不重要)
目标:

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示例:

companion
 - companion_id
 - news_id
 - user_id
news
 - news_id
 - user_id
user
 - user_id
 - user_name
vote
 - vote_id
 - news_id
 - user_id
  • 用户2有1篇新闻文章。这篇新闻文章有2票
  • User2是1文章的同伴。这篇新闻文章获得3票
  • 用户2应拥有5张选票
方法:

companion
 - companion_id
 - news_id
 - user_id
news
 - news_id
 - user_id
user
 - user_id
 - user_name
vote
 - vote_id
 - news_id
 - user_id
下面的查询结果是31而不是5,因为它无法在两个不同的表上对其进行分组

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

不加入工会是关键。请注意,您必须更改用户id两次。请随意加入users表以获得真实的用户名

现场观看它的工作


询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,以及它们不起作用的原因。