2011-05-12 12 views
5

Dire che ho una tabella di fiori con i colori associati. È possibile ottenere un elenco di fiori e ordinarli, per esempio, Yellow prima, quindi Blue, quindi Red. Fondamentalmente, voglio specificare un elenco di valori e ordinare il risultato con quei valori. Possibile?MySQL - ordine da qualcosa non ASC o DESC

risposta

9

Si potrebbe utilizzare FIND_IN_SET:

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

..o l'istruzione CASE ANSI:

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 
2

è possibile aggiungere un campo nella tabella di colori per la sort_order ed e fornire i valori secondo il requisito sorta . Nella query è possibile utilizzare ORDER BY sort_order ASC

Mi aspetto che si desideri ordinarlo in base a un requisito dinamico non esplicitamente per questi tre colori menzionati. Ciò ti consentirà una completa flessibilità per gestire l'ordinamento.

+0

Come aggiungere una colonna risolve il problema quando a volte ho bisogno di ordinare (giallo, blu, rosso), a volte (blu, giallo, rosso), a volte (rosso, giallo, blu), .... – StackOverflowNewbie

+8

THe ' Il campo sort_order 'dovrebbe memorizzare quella gerarchia in base alla quale è necessario ordinare. Per es. il valore del colore e 'sort_order' deve essere il seguente quando si desidera ordinare (Blu, Giallo, Rosso), Blu - 1 Giallo - 2 Rosso - 3 WHen si desidera ordinare (Rosso, Giallo, Blu) Blu - 3 Giallo - 2 Rosso - 1 Questo ti aiuterà a modificare l'ordinamento senza modificare il codice php. A un livello più alto, è necessario fornire una fornitura Web per gestire l'ordinamento in una pagina in modo che, quando mai, l'utente/amministratore desideri modificare l'ordine. Questo è come viene gestito su siti Web di fascia alta. –

2

La mia scelta sarebbe stata quella di utilizzare la funzione FIELD(str, str1, str2, ...).

Restituisce l'indice (posizione) di str in l'elenco str1, str2, str3, .... Restituisce 0 se non viene trovato str.

Così si potrebbe utilizzare il valore di ritorno di ordinare l'elenco dei risultati:

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

Se si vuole invertire l'ordine, basta aggiungere DESC.