MySQL ordina per nome
-
05-07-2019 - |
Domanda
È possibile ordinare una colonna in ordine alfabetico ma ignorando alcune parole come ad esempio "The"
per es.
Una normale query restituisce
string 1
string 3
string 4
the string 2
Vorrei tornare
string 1
the string 2
string 3
string 4
È possibile?
Modifica Si prega di notare che sto cercando di sostituire più parole come The, A, ecc ... È possibile farlo?
Soluzione
Puoi provare
SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))
ma nota che sarà molto lento per set di dati di grandi dimensioni in quanto deve ricalcolare la nuova stringa per ogni riga
IMO stai meglio con una colonna separata con un indice su di essa.
Per più password basta continuare a annidare le chiamate REPLACE
. :)
Altri suggerimenti
Questo sostituirà tutti i principali " Il " come esempio
SELECT *
FROM YourTable
ORDER BY REPLACE(Val,'The ', '')
Sì, dovrebbe essere possibile usare espressioni con la parte ORDER:
SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")
Ho un elenco musicale di oltre 75.000 dischi e ho riscontrato una situazione simile. Ho scritto uno script PHP che ha cercato tutte le stringhe che iniziavano con 'A', 'An' o 'The' e ho troncato quella parte della stringa. Ho anche convertito tutte le lettere maiuscole in minuscole e memorizzato quella stringa in una nuova colonna. Dopo aver impostato un indice su quella colonna, ho finito.
Ovviamente si visualizza la colonna iniziale ma si ordina per la colonna indicizzata appena creata. Ottengo risultati tra circa un secondo.