sql >> Database teknologi >  >> RDS >> Mysql

MySQL sorterer efter en eller anden liste

Siden 1 < 3 < 77 < 123 , en simpel ORDER BY id ville være tilstrækkeligt.

Hvis du derimod ønsker at bestille på denne måde:77, 3, 123, 1 , så kunne du bruge funktionen FIELD() :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
ORDER BY FIELD(id, 77, 3, 123, 1)

Hvis din forespørgsel matcher flere rækker, end du angiver i FIELD

FIELD returnerer 0 når en række ikke matcher nogen af ​​de id'er, du angiver, dvs. et tal, der er mindre end de tal, der returneres for anførte id'er. Det betyder, at hvis din forespørgsel matcher flere rækker end dem, du angiver, vil disse rækker vises først. For eksempel:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 77, 3, 123, 1)

I dette eksempel er rækken med ID 400 vises først. Hvis du ønsker, at disse rækker skal vises sidst, skal du blot vende listen over ID'er om og tilføje DESC :

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 1, 123, 3, 77) DESC



  1. FEJL 1148:Den brugte kommando er ikke tilladt med denne MySQL-version

  2. Slet alle rækker undtagen første N fra en tabel med en enkelt kolonne

  3. JDBC returnerer MySQLSyntaxError Exception med korrekt sætning

  4. Sådan oprettes forbindelse til Postgres via Node.js