Mysql
 sql >> Base de données >  >> RDS >> Mysql

Tri alphabétique MySQL avancé avec préfixe ?

Vous pouvez faire ceci :

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

Il peut être judicieux de créer une vue sur cette table projetant un name_value supplémentaire colonne définie sur IF() expression ci-dessus. Ensuite, vous pouvez trier par cette colonne et la sélectionner sans avoir à polluer vos requêtes avec IF() .

Exemple de vue, en supposant que le nom de l'université est stocké dans la colonne 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;

Ensuite, vous pouvez choisir parmi Universities de la même manière que vous le faites depuis list_universities , sauf qu'il aura un name_value supplémentaire colonne que vous pouvez sélectionner, ou trier par, ou quoi que ce soit.

Notez que cette approche (ainsi que ORDER BY IF(...) ) ne pourra pas utiliser d'index sur name pour améliorer les performances du tri.