Specifinė rūšiavimo tvarka MySQL užklausoje

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:

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:

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:

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:

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ų:

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:

id
4
5
1
6
7
8
9
10

Sąlygos operatorius IF gali būti pakeistas į CASE:

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:

id
4
5
1
6
7
8
9
10
Šis įrašas buvo paskelbtas kategorijoje Programavimas su žyma , , , . Įrašykite į adresyną nuolatinę nuorodą.

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *