Kayıt için
SELECT * FROM mytable WHERE id IN (1,2,3,4) ORDER BY FIELD(id,3,2,1,4);
iyi çalışmalı çünkü listedeki WHEREmaddeyi sipariş etmek zorunda değilsin
Nasıl çalıştığına gelince,
FIELD () , aradığınız değer varsa virgülle ayrılmış bir listenin dizin konumunu döndüren bir işlevdir.
- İd = 1 ise, FIELD (id, 3,2,1,4) , 3 değerini döndürür (1'in listede bulunduğu konum).
- İd = 2 ise, FIELD (id, 3,2,1,4) , 2 değerini döndürür (2 listedeki pozisyon)
- İd = 3 ise, FIELD (id, 3,2,1,4) , 1 değerini döndürür (3'ün listede bulunduğu konum).
- Eğer ID = 4 ise FIELD (id, 3,2,1,4) 4 döndürür (4'ün listede olduğu pozisyon)
- İd = başka bir şey olursa, ALAN (id, 3,2,1,4) 0 değerini döndürür (listede değil)
ORDER BYDeğerleri şey tarafından değerlendirilir ALANI () döner
Her çeşit fantezi siparişi oluşturabilirsiniz
Örneğin, IF () işlevini kullanarak
SELECT * FROM mytable
WHERE id IN (1,2,3,4)
ORDER BY IF(FIELD(id,3,2,1,4)=0,1,0),FIELD(id,3,2,1,4);
Bu, listenin başında ilk 4 kimliğin görünmesine neden olur, Aksi takdirde, alt tarafta belirir. Neden?
İçinde ORDER BY0 veya 1 olsun.
- İlk sütun 0 ise, ilk 4 kimliğin herhangi birinin görünmesini sağlayın.
- İlk sütun 1 ise, daha sonra görünmesini sağlayın
İlk sütunda DESC ile çevirelim
SELECT * FROM mytable
WHERE id IN (1,2,3,4)
ORDER BY IF(FIELD(id,3,2,1,4)=0,1,0) DESC,FIELD(id,3,2,1,4);
İçinde, ORDER BYhala 0 veya 1 olsun.
- İlk sütun 1 ise, ilk 4 kimliden başka bir şey yapmayın.
- İlk sütun 0 ise, ilk 4 kimliği orijinal sırada görünmesini sağlayın.
GERÇEK SORULARINIZ
Bu konuda ciddiyetle içsel istiyorsanız , Kitabın 189 ve 192. Sayfalarına bakınız.

Gerçek bir derin dalış için.
Temelde, ORDER *order( ORDER BYİfade ağacı) adında bir C ++ sınıfı vardır . Olarak JOIN::prepare, *orderbilinen bir fonksiyonun kullanılır setup_order(). Neden JOINsınıfın ortasında ? Her sorgu, tek bir masaya karşı bile bir sorgu, her zaman bir JOIN olarak işlenir (Yazımı görün. Bir JOIN koşulu ile bir WHERE koşulu arasında bir yürütme farkı var mı? )
Bütün bunların kaynak kodu sql/sql_select.cc
Açıkça, ORDER BYağaç değerlendirmesini yapacak FIELD(id,3,2,1,4). Dolayısıyla, 0,1,2,3,4 sayıları, ilgili satıra referans yapılırken sıralanan değerlerdir.
SELECT *, FIELD(id,3,2,1,4) AS f FROM mytable WHERE id IN (3,2,1,4);Ardından ekleyinORDER BY fveyaORDER BY FIELD(id,3,2,1,4)tekrar deneyin.