2012-04-14 6 views
2

Jemand auf hier half bei der Zusammenstellung dieser äußerst nützliche Abfrage!ORDER BY brechen mysql query

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 

Das funktioniert gut! Wenn ich jedoch versuche, die Ergebnisse mit

zu bestellen, erhalte ich einen Syntaxfehler. Fehle ich etwas Offensichtliches hier?

Vielen Dank!

+0

die Bestellung sollte Ihr letztes Kriterium sein schreiben –

+0

Danke allen. Ich wusste, es wäre etwas Einfaches! –

+0

(ohne Bezug auf das Problem): Sie brauchen wahrscheinlich nur SELECT r. * '. Nicht 'SELECT *' –

Antwort

3

es ein Auftrag für die Teile der Abfrage ist, und ORDER BY am Ende (vor den LIMIT und die OFFSET ... versuchen, dies sein sollten:

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 

auch sicherstellen, dass Sie Räume haben in das Ende jeder Zeile ...

Hinweis, dass in mySQL, die eine verkürzte Version für LIMIT x OFFSET y ist -. Sie gerade LIMIT y,x

+0

Warum haben Leerzeichen am Ende der Zeilen? –

+0

Macht Sinn, aber die Leerzeichen am Ende der Zeilen sind ein bisschen seltsam. –

+0

es hängt davon ab, wie Sie die Abfrage ausführen, wenn (zum Beispiel) die Abfrage in einer mehrzeiligen Zeichenfolge (in PHP - wieder zum Beispiel) als beim Aufrufen des SQL-Server entfernt die Zeilenumbrüche und wenn Sie keine Leerzeichen haben Am Ende der Linie - Ihre Linien verbindet, und das verursacht Fehler im besseren Fall oder unerwünschtes Verhalten im schlimmsten Fall ... –

1

ORDER BY muss nach der HAVING kommen.