2012-04-14 9 views
2

誰かがこの非常に便利なクエリをまとめる手助けをしました!ORDER BY mysqlのクエリを破る

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
LIMIT 50 OFFSET 0 

どちらが効果的ですか。しかし、結果を使用して注文しようとすると、

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
ORDER BY r.usefulness DESC 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
LIMIT 50 OFFSET 0 

が表示されます。私はここで何かを見逃していますか?

ありがとうございます!

+0

あなたの最後の基準であるべきことで順序を書くことができます –

+0

みなさんありがとう。それは何か簡単だろうと分かっていた! –

+0

(問題とは無関係):おそらく 'SELECT r。*'だけが必要です。 'SELECT *'ではない –

答えて

3

がクエリの部品の注文があり、かつORDER BYLIMITOFFSET前に(最後にする必要があります...これを試してみてください。

SELECT * FROM results r 
INNER JOIN categories c on r.id = c.result_id 
WHERE c.name in ('$purpose', '$prop_type', '$loan_type') 
GROUP BY r.id 
HAVING COUNT(c.c_id) = 3 
ORDER BY usefulness DESC 
LIMIT 50 OFFSET 0 

もあなたがスペースを持っていることを確認してください任意の行の終わり... MySQLでLIMIT x OFFSET yための短縮バージョンであることを

予告 - 。あなただけLIMIT y,x

+0

なぜ行末に空白があるのですか? –

+0

意味がありますが、行末のスペースは少し奇妙です。 –

+0

それは、たとえば、クエリが複数行の文字列(PHPなど)にある場合、SQL Serverを呼び出して改行を削除する場合と、空白がない場合ラインの終わりに - あなたのラインが接続し、より良いケースでエラーを引き起こす、または最悪の場合に望ましくない動作... –

1

ORDER BYは、HAVINGの後に来なければなりません。