2014-07-24 9 views
5

Hier ist meine Frage:Verwendung von IN und Bestellung?

SELECT * FROM article WHERE id IN (300, 400, 100) 

Aber es befiehlt immer die Artikel gleich, von id.

So würde ich raus für die oben:

id 
100 
300 
400 

Gibt es eine Möglichkeit, die Ergebnisse aus in der Reihenfolge zu bekommen, dass sie in der IN-Anweisung angefordert wurden? z.B.

id 
300 
400 
100 
+2

Wenn Sie keine 'ORDER BY'-Klausel angeben, sind result * sets * aus einer SQL-Auswahl per Definition ungeordnet. – knittl

+0

Duplizieren: http://stackoverflow.com/questions/396748/ordering-by-the-order-of-order values-in-a-sql-in-Klausel? rq = 1 – Matt

Antwort

12

Sie können so etwas versuchen. Verwenden Sie die FIELD() Funktion.

SELECT * FROM article 
WHERE id IN (300, 400, 100) 
ORDER BY FIELD(id, 300, 400, 100); 
0

Sie könnten die Werte fallen Sie in eine temporäre Tabelle wollen wie so:

CREATE TABLE TempT (sortOrder int, 
        id int); 

INSERT INTO TempT (sortOrder, id) VALUES 
(1, 300),(2, 400),(3, 100); 

Und dann auf den Tisch kommen wie so:

SELECT a.* 
FROM article a 
INNER JOIN TempT t ON a.id = t.id 
ORDER BY t.sortOrder; 

SQL Fiddle Beispiel. Dies funktioniert gut, wenn Sie viele Werte haben, die Sie in die IN-Anweisung aufnehmen müssen.