Permalänk
Medlem

mysql order by

Säg att jag har denna mysql-sats:
SELECT * FROM tabell ORDER BY grupp, namn

Kolumnen "grupp" innehåller 5 olika numeriska värden: 1-5, men jag vill egentligen att värdena 1-4 skall tolkas som samma i order-by-satsen. Är detta möjligt?

Resultatet för ovanstående sats skulle kunna se ut:
namn B - grupp 1
namn U - grupp 2
namn D - grupp 3
namn A - grupp 4
namn C - grupp 5

Jag vill alltså få resultatet:
namn A - grupp 4
namn B - grupp 1
namn D - grupp 3
namn U - grupp 2
namn C - grupp 5

Permalänk
Medlem
Skrivet av Madoor:

Säg att jag har denna mysql-sats:
SELECT * FROM tabell ORDER BY grupp, namn

Kolumnen "grupp" innehåller 5 olika numeriska värden: 1-5, men jag vill egentligen att värdena 1-4 skall tolkas som samma i order-by-satsen. Är detta möjligt?

Resultatet för ovanstående sats skulle kunna se ut:
namn B - grupp 1
namn U - grupp 2
namn D - grupp 3
namn A - grupp 4
namn C - grupp 5

Jag vill alltså få resultatet:
namn A - grupp 4
namn B - grupp 1
namn D - grupp 3
namn U - grupp 2
namn C - grupp 5

Du behöver slå ihop två queries för att det ska fungera

SELECT * FROM tabell WHERE grupp IN ('grupp 1', 'grupp 2', 'grupp 3', 'grupp 4') ORDER BY namn UNION ALL SELECT * FROM tabell WHERE grupp NOT IN ('grupp 1', 'grupp 2', 'grupp 3', 'grupp 4') ORDER BY grupp, namn

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Ah, ok. Tack!

Permalänk
Medlem

jag vet inte om detta fungerar i MySQL, men testa något sånt här:

SELECT * FROM tabell ORDER BY CASE grupp WHEN 'grupp 5' THEN 1 ELSE 0 END CASE, namn

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

jag vet inte om detta fungerar i MySQL, men testa något sånt här:

SELECT * FROM tabell ORDER BY CASE grupp WHEN 'grupp 5' THEN 1 ELSE 0 END CASE, namn

Ännu bättre. Tack! Fick ersätta "END CASE" med bara "END" för att det skulle funka.

Permalänk
Medlem
Skrivet av Madoor:

Ännu bättre. Tack! Fick ersätta "END CASE" med bara "END" för att det skulle funka.

Detta är kanske ännu bättre. Trodde inte att ORDER BY tillät uttryck men där ser man

SELECT * FROM tabell ORDER BY (grupp = 5), namn

Visa signatur

Kom-pa-TI-bilitet