Mysql SQL-计算其联接ID的列值
我要数一数一个帖子的得票和落票 它应该只显示用户是否是另一个用户的朋友 我的问题是,上升票和下降票的计数不准确 例如: post_id 5和4只有1个向上投票,但检索到的数据表明它们有3个向上投票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
我创建的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。它可以正常工作。谢谢你,兄弟。哈哈,我真的不擅长提问。英雄联盟