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

Ordinamento alfabetico MySQL avanzato con prefisso?

Potresti farlo:

ORDER BY IF(SUBSTRING(name, 1, 14) = 'University of ', SUBSTRING(name, 15), name)

Potrebbe essere una buona idea creare una vista su questa tabella proiettando un ulteriore name_value colonna impostata su IF() espressione sopra. Quindi puoi ordinare in base a questa colonna e selezionarla senza dover inquinare le tue query con IF() .

Visualizzazione di esempio, supponendo che il nome dell'università sia memorizzato nella colonna name :

CREATE VIEW Universities AS
    SELECT
        list_universities.*,
        IF(SUBSTRING(name, 1, 14) = 'University of ',
           SUBSTRING(name, 15),
           name) AS name_value
    FROM list_universities;

Quindi puoi selezionare da Universities allo stesso modo di list_universities , tranne per il fatto che avrà un name_value extra colonna che puoi selezionare, ordinare per o altro.

Nota che questo approccio (così come ORDER BY IF(...) ) non sarà in grado di utilizzare alcun indice su name per migliorare le prestazioni dell'ordinamento.