2016-10-12 8 views
0

このSQL SELECTクエリは私に必要なすべての行を与えますが、ORDER BY句は定義したエイリアスと一緒に演奏されていないようです。 idによってなぜこのSQLクエリは私のエイリアスで注文しないのですか?

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、それだけ注文することによって発注。私は同様の質問に対する答えを見ていましたが、私の場合に役立つように私は何も飛び出さなかった。どのようにこれを解決するための任意のアイデアですか?より多くの情報を提供する必要があるかどうかを教えてください。

ありがとうございます!

EDIT:ここに結果データがあります。ナンセンスのプレースホルダーのテキストを赦してください。

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 

EDIT 2:私はそれは私が望んでいた1だからORDER BY句でcontent.idを指定しようとしました。何も変わっていません。

+0

エイリアスではなく式自体を '注文する 'ときに機能しますか?例えば(AVG(ratings.rating)、0)desc、id desc' – SlimsGhost

+0

@SlimsGhostそれは良い考えですが、私はそれを試しただけで同じことをします。 –

+2

その場合、現在の結果を投稿して「間違った」ソートを表示できますか? – SlimsGhost

答えて

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の列を持ちます。私はそれを解決するための標準的な方法があるかどうかはわかりませんが、クエリがFROM contentであるため、MySQLはcontent.idを選択しているようです。

解決策は、id列を明白にすることです。

GROUP BY users.id 
ORDER BY 
    avgrating DESC, 
    users.id DESC; 

Here's the result

avgrating username id userid 
4   joe   1 1 
2   jill  5 4 
1   bob   4 3 
+0

ありがとうございますが、実際には私がORDER BYにしたいのは 'content.id'です。私はORDER BY句でこれを指定しようとしましたが、何も変更されませんでした。 –

+0

@AgBengip Ah。今、スキーマをリロードするSQLFiddleを取得できません。 : -/ – Schwern

+0

@AgBengip少なくともORGER BY DESCを使用してセカンダリなしで試したことがありますか? – Schwern

関連する問題