Od 1 < 3 < 77 < 123
, prosty ORDER BY id
wystarczy.
Jeśli jednak chcesz zamówić w ten sposób:77, 3, 123, 1
, możesz użyć funkcji FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Jeśli Twoje zapytanie pasuje do większej liczby wierszy niż podajesz w FIELD
FIELD
zwraca 0
gdy wiersz nie pasuje do żadnego z wymienionych identyfikatorów, tj. liczba mniejsza niż liczby zwrócone dla wymienionych identyfikatorów. Oznacza to, że jeśli zapytanie pasuje do większej liczby wierszy niż wymienione, te wiersze pojawią się jako pierwsze. Na przykład:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
W tym przykładzie wiersz o identyfikatorze 400
pojawi się jako pierwszy. Jeśli chcesz, aby te wiersze pojawiały się jako ostatnie, po prostu odwróć listę identyfikatorów i dodaj DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC