2012-06-07 7 views
25

Ich werde eine feste Liste von Elementen haben, um zu bestellen, dass ich nicht weiß, bis ich die Abfrage ausführen, da es einen Randomisierungsschritt gibt.Mysql Reihenfolge nach einer festen Liste

würde Ich mag so etwas wie die folgenden haben:

davon ausgehen, dass is_launch_set 1,3,7,11 zurückkehren wird, aber haben unter randomisiert worden:

select * from items where is_launch_set=1 order by id values (3,11,7,1); 

irgendwelche Ideen, wie zu erreichen Dies? Ich dachte vielleicht ein find_in_set aber nicht wirklich sicher.

+0

Mögliche Duplizieren: [MySQL Sortieren nach einiger Liste] (http: // Stackoverflow .com/questions/6810793 /), obwohl dieser eine gründlichere Antwort erhielt. –

Antwort

55

können Sie tun, indem Sie entweder mit:

ORDER BY FIND_IN_SET(id, '3,11,7,1') 

oder

ORDER BY FIELD(id, 3, 11, 7, 1) 

oder

ORDER BY CASE id WHEN 3 THEN 0 
       WHEN 11 THEN 1 
       WHEN 7 THEN 2 
       WHEN 1 THEN 3 
         ELSE 4 
     END 
+1

bist du sicher, dass das Finden im Set funktionieren würde - bevor ich die Frage gestellt habe, dachte ich, die Antwort wäre, aber die Reihenfolge scheint jedes Mal anders zu sein. Gibt es irgendwelche Konfigurationseinstellungen oder irgendetwas anderes? Die Feldantwort sieht gut aus. – timpone

+0

@timpone: Ich bin mir sicher, dass es funktioniert. Sie könnten 'FIND_IN_SET (id, '3,1,17,1')' 'auf' SELECT' setzen, um sicherzustellen, dass es die erwarteten Ergebnisse zurückgibt. – zerkms

+1

Haben Sie Informationen darüber, welcher dieser Ansätze die schnellste ist? Gibt es etwas, was man tun kann, um es schneller zu machen, als einen Index auf das Feld 'ID' zu setzen? –

Verwandte Themen