2017-05-23 8 views
2

Ich muss eine bestimmte SQL-Abfrage durchführen. Zum Beispiel haben wir eine Tabelle people und diese Tabelle hat diese Platte genannt:Sql - durch spezifische Reihenfolge auswählen

- João (id ->1) 
- Telmo (id ->2) 
- Maria (id ->3) 
- Henrique (id ->4) 
- Pedro (id ->5) 

Ich werde eine bestimmte Person erhalten und für i Beispiel erhalten henrique id 4 die Auswahl mir diese Liste anzuzeigen hat:

- Henrique 
- Maria 
- Telmo 
- João 
- Pedro 

Und ich brauche auch in umgekehrter Reihenfolge

- Henrique 
- Pedro 
- João 
- Telmo 
- Maria 

Wie kann ich das tun zu tun?

Danke

Antwort

0

Verwenden

select `name` from `table_name` order by find_in_set(id,'4,3,2,1,5'); 

und die inverse Liste, die Verwendung zu erhalten:

select `name` from `table_name` order by find_in_set(id,'4,5,1,2,3'); 
2

Verwenden CASE WHEN für den Namen überprüfen:

select name 
from mytable 
order by case when name = 'Henrique' then 1 else 2 end, id; 

Und von Natürlich

select name 
from mytable 
order by case when name = 'Henrique' then 1 else 2 end, id desc; 

für die umgekehrte Reihenfolge mit Henrique noch zuerst.

Wenn Sie die ID anstelle des Namens erhalten, dann

order by case when id = 4 then 1 else 2 end, id [desc]; 
+0

in Ihrem Namen Ihr Ergebnis durch die Abnahme des ersten Buchstaben bestellen ich bin nicht die richtige bekommen Auflistung. @ThorstenKettner – user3242861

+0

wenn ich ID <= 4, funktioniert gut! Danke @ThorstenKettner – user3242861

+0

Warum '<= 4'? Ich dachte, dass nur ID ** = ** 4 speziell behandelt werden sollte. –

1

Sie UNION Operator kann mit < alle Leute bekommen =, dass id und alle Menschen> id, zB:

SELECT name FROM table WHERE id >= 4 ORDER BY id DESC 

UNION 

SELECT name FROM table WHERE id > 4 ORDER BY id 
0

können Sie fügen Sie einfach die Nähe ORDER BY name, wenn Sie eine Abfrage möchten, die

Verwandte Themen