Mysql 如何按其他表值排序sql查询
我知道stackoverflow是这个问题的答案,但我有一点不同的情况。 我在第二个表中有很多单元格,但SQL查询只获取第一个单元格。好的,不是所有的查询,只有WHERE标记 例如:Mysql 如何按其他表值排序sql查询,mysql,sql,Mysql,Sql,我知道stackoverflow是这个问题的答案,但我有一点不同的情况。 我在第二个表中有很多单元格,但SQL查询只获取第一个单元格。好的,不是所有的查询,只有WHERE标记 例如: 1表: user_id = 1 user_id = 2 user_id = 1 | year = 2015 | rating = 55 user_id = 1 | year = 2016 | rating = 10 user_id = 2 | year = 2016 | rating = 50 user_id =
1表:
user_id = 1
user_id = 2
user_id = 1 | year = 2015 | rating = 55
user_id = 1 | year = 2016 | rating = 10
user_id = 2 | year = 2016 | rating = 50
user_id = 2 | year = 2016 | rating = 5
2表:user_id = 1
user_id = 2
user_id = 1 | year = 2015 | rating = 55
user_id = 1 | year = 2016 | rating = 10
user_id = 2 | year = 2016 | rating = 50
user_id = 2 | year = 2016 | rating = 5
SQL查询:$query = "SELECT c.*,v.upvotes
FROM ".PREFIX."_users c
LEFT JOIN (SELECT user_id,pol,vid_sporta,year_sport,category,SUM(rating) as upvotes
FROM ".PREFIX."_userrating
GROUP BY user_id
) v
ON c.user_id = v.user_id
WHERE year_sport='2015'
ORDER BY upvotes DESC";
这个查询只给了我一个用户,whitch拥有2015第一名
我需要SQL查询中的一些while循环:)
请提供帮助:)似乎有一些问题正在发生 首先,
SELECT user_id,pol,vid_sporta,year_sport,category,SUM(rating) as upvotes
应该是
SELECT user_id,SUM(rating) as upvotes
您只希望包含要返回到查询其余部分的列,任何不属于聚合函数的列也必须出现在GROUP BY
语句中
第二,这就是为什么你可能只会得到一条记录,那就是你的所在年份\u sport='2015'
。因为where条件在外部查询中,所以它将您的左连接
视为内部连接
,并限制在用户评级
中包含该年份的所有结果。将where语句移动到内部查询,您应该可以从year\u sport=2015
中获得所有用户,但只能获得upvowers
$query = "SELECT c.*,v.upvotes
FROM ".PREFIX."_users c
LEFT JOIN (SELECT user_id,SUM(rating) as upvotes
FROM ".PREFIX."_userrating
WHERE year_sport='2015'
GROUP BY user_id
) v
ON c.user_id = v.user_id
ORDER BY upvotes DESC";
根据pol、vid_sporta、year_sport、category
字段的位置,选择这些字段而不对其进行分组可能会导致灾难。。。它只有一条记录,因为只有一条满足WHERE条件……因为groupby;)您的预期结果是什么?谢谢:)但我只需要一个显示一个用户,并由该用户进行评分。@P.Salmon我很震惊您在不知道预期结果的情况下无法回答此问题。@Matt我需要由params进行的完整用户评分。这是我的PREFIX_userrating表中的屏幕截图
如果我删除按用户id分组
我从数据库中获得正确的数据,但一个用户显示了很多次(DB中有多少单元格-显示了这么多)。如何修复它?:)请注意,如果您知道每个用户在2015年只获得了1个等级,那么您就不需要聚合函数或分组。现在的方式更安全,以防包含多年或有重复记录……但您可以将“SUM(rating)AS upvots”更改为“rating AS upvots”,并在尝试时删除group by子句