Mysql SQL-计算其联接ID的列值

Mysql SQL-计算其联接ID的列值,mysql,sql,database,Mysql,Sql,Database,我要数一数一个帖子的得票和落票 它应该只显示用户是否是另一个用户的朋友 我的问题是,上升票和下降票的计数不准确 例如: post_id 5和4只有1个向上投票,但检索到的数据表明它们有3个向上投票 我创建的sqlfiddle。您能否尝试一下,通过这个小更改,它是否返回了预期的输出: COUNT(DISTINCT (CASE WHEN vote.vote_type = 'upvote' then vote_id ELSE NULL END)) AS 'upvote', COUNT(DISTINC

我要数一数一个帖子的得票和落票

它应该只显示用户是否是另一个用户的朋友

我的问题是,上升票和下降票的计数不准确

例如:

post_id 5和4只有1个向上投票,但检索到的数据表明它们有3个向上投票


我创建的sqlfiddle。

您能否尝试一下,通过这个小更改,它是否返回了预期的输出:

COUNT(DISTINCT (CASE WHEN vote.vote_type = 'upvote' then vote_id ELSE NULL END)) AS 'upvote', 
COUNT(DISTINCT (CASE WHEN vote.vote_type = 'downvote' then vote_id ELSE NULL END)) AS 'downvote',

看看这是否能让你在SQLite中得到测试,网站不能正常工作

SELECT vote_type, post_id, user_id, COUNT(*) FROM (
   SELECT * FROM post JOIN vote ON vote.post_id = post.post_id WHERE (post.user_id || "," || vote.user_id) IN (
      SELECT DISTINCT user_id || "," || friend_id FROM friend WHERE request = 'friend'
   )
) GROUP BY vote_type;

这个查询的一个大问题是连接| |,我相信它可以变得更健壮。

出现这个问题是因为用户_id=8发出了3个好友请求,所以您的查询为每个请求生成了一行,您只需要一行-如果您像这样更改查询,您可以避免多次计数:

SELECT user_info.id,user_info.fb_id,user_info.profile_pic,
   user_info.fname,user_info.lname, post.post_id,post.message,post.time,post.img,post.user_id,
   COUNT(CASE WHEN vote.vote_type = 'upvote' then 1 ELSE NULL END) AS 'upvote', COUNT(CASE WHEN vote.vote_type = 'downvote' then 1 ELSE NULL END) AS 'downvote'

   FROM user_info

   JOIN post
   on post.user_id = user_info.id

    LEFT JOIN vote ON
    vote.post_id = post.post_id

     WHERE EXISTS (select * FROM friend
     WHERE (friend.user_id = user_info.id OR friend.friend_id = user_info.id)
     AND friend.request = 'friend' AND (friend.user_id = 8 OR friend.friend_id = 8))

     GROUP BY post.post_id
     ORDER BY post.post_id DESC

您应该在问题中发布您的模式和查询。大多数使用手机的人无法正确访问SQLFiddle。它可以正常工作。谢谢你,兄弟。哈哈,我真的不擅长提问。英雄联盟