这个SQL SELECT查询为我提供了我想要的所有行,但是ORDER BY子句似乎没有与我定义的别名一起播放。
SELECT
IFNULL(AVG(ratings.rating), 0) AS avgrating,
users.username,
content.*
FROM content
LEFT JOIN ratings
ON ratings.contentid = content.id
LEFT JOIN users
ON users.id = content.userid
GROUP BY id
ORDER BY
avgrating DESC,
id DESC;
不是先按avgrating
排序,而是id
秒排序,而只按id
排序。我查看了类似问题的答案,但没有任何事情对我有所帮助。关于如何解决这个问题的任何想法?如果我应该提供更多信息,请告诉我。
谢谢!
编辑:这是结果数据。请原谅无意义的占位符文本。
avgrating username id title content category userid
3.0000 jijoij 11 nuunun "foo" 0 2
0.0000 jijoij 10 regreg "foo" 3 2
0.0000 jijoij 9 fefefe "foo" 3 2
0.0000 testkonto 8 i34jt4jt "foo" 3 4
0.0000 testkonto 7 oouo "foo" 3 4
0.0000 testkonto 6 oyouuoouo "foo" 3 4
5.0000 testkonto 5 oyouuouo "foo" 3 4
1.0000 testkonto 4 jijijijiji "foo" 3 4
0.0000 testkonto 3 fgreg "foo" 3 4
0.0000 testkonto 2 tbtrb "foo" 3 4
3.6667 jijoij 1 gergj "foo" 1 2
编辑2:我已经尝试在content.id
子句中指定ORDER BY
,因为那是我想要的那个。没有任何改变。
答案 0 :(得分:1)
I put this together in SQLFiddle它揭示了这个问题。
avgrating username id userid
5 joe 1 1
4 joe 2 1
3 joe 3 1
2 jill 5 4
2 jill 6 4
1 bob 4 3
按content.id
进行分组和排序。我怀疑OP想要users.id
。问题是:
GROUP BY id
ORDER BY
avgrating DESC,
id DESC;
id
含糊不清。所有这些表(无论如何都在我的架构中)都有一个id
列。我不确定是否有解决问题的标准方法,但MySQL似乎正在挑选content.id
,因为查询是FROM content
。
解决方案是使id
列明确无误。
GROUP BY users.id
ORDER BY
avgrating DESC,
users.id DESC;
avgrating username id userid
4 joe 1 1
2 jill 5 4
1 bob 4 3