Jei reikia surūšiuoti sąrašą pagal tam tikrą tvarką, pavyzdžiui, skaičių sąraše pradžioje 4,5,1 ir toliau didėjimo tvarka, galite sukurti rūšiavimo tvarką pagal papildomus stulpelius su operatoriumi IF:
1 2 3 4 5 6 7 | SELECT id, -- papildomi rūšiavimas stulpeliai IF(id=4, 1, 0) c1, IF(id=5, 1, 0) c2, IF(id=1, 1, 0) c3 FROM test WHERE id IN (1,2,3,4,5,6,7,8,9,10) -- rūšiuoti pagal papildomus stulpelius mažėjimo ir toliau didėjimo tvarka ORDER BY c1 DESC , c2 DESC , c3 DESC , id ASC |
Užklausos rezultatas:
1 2 3 4 5 6 7 8 9 | id c1 c2 c3 4 1 0 0 5 0 1 0 1 0 0 1 6 0 0 0 7 0 0 0 8 0 0 0 9 0 0 0 10 0 0 0 |
Šiame pavyzdyje sąlygos operatorius grąžina 1 arba 0. Nes 0 yra didesnis už 1, tai atvirkščiai surūšiuojama mažėjančia tvarka ir tada papildomų stulpelių reikšmės bus pirmos. MySQL operatoriai gali būti naudojamas rūšiavimo aprašyme, tai užklausa keičiamas taip:
1 2 3 4 5 | SELECT id FROM test WHERE id IN (1,2,3,4,5,6,7,8,9,10) -- rūšiuoti pagal sąlygas ORDER BY IF(id=4, 1, 0) DESC , IF(id=5, 1, 0) DESC , IF(id=1, 1, 0) DESC , id ASC |
Užklausos rezultatas:
1 2 3 4 5 6 7 8 9 | id 4 5 1 6 7 8 9 10 |
Kadangi IF grąžina 0 arba 1, tai sąlygos operatorius gali būti pakeistas į palyginimo operatorių, tai užklausa būtų:
1 2 3 4 5 | SELECT id FROM test WHERE id IN (1,2,3,4,5,6,7,8,9,10) -- rūšiuoti pagal palyginimus ORDER BY id=4 DESC , id=5 DESC , id=1 DESC , id ASC |
Užklausos rezultatas:
1 2 3 4 5 6 7 8 9 | id 4 5 1 6 7 8 9 10 |
Sąlygos operatorius IF gali būti pakeistas į CASE:
1 2 3 4 5 6 7 8 9 10 11 | SELECT id FROM test WHERE id IN (1,2,3,4,5,6,7,8,9,10) ORDER BY -- rūšiuoti pagal sąlygą CASE id WHEN 4 THEN 1 WHEN 5 THEN 2 WHEN 1 THEN 3 ELSE 4 END ASC |
Užklausos rezultatas:
1 2 3 4 5 6 7 8 9 | id 4 5 1 6 7 8 9 10 |