Aller au contenu

Classer des artistes musicaux par ordre alphabétique


Sujets conseillés

Posté

Salut le Hub

J'ai une table contenant des noms d'artistes, et je souhaiterais les trier par ordre alphabétique. Mais en omettant les préfixes "The" ou "Les".

Je m'explique.

Ma table:

1 | Abba
2 | ZZ Top
3 | The Eagles
4 | Led Zeppelin
5 | Les Chaussettes Noires

Ce que je souhaiterais obtenir:

Abba

Les Chaussettes Noires

The Eagles

Led Zeppelin

ZZ Top

c'est-à-dire un classement alphabétique qui ne prenne pas en compte les mots "The" et "Les" quand ils sont au début d'une occurence. Mais que ces mots soient quand même affichés dans les résultats: je ne souhaite pas les supprimer.

J'ai bien quelques idées, mais j'ai peur que ce soit trop "crade" et donc que ça prenne trop de ressources pour une table bien remplie.

À votre avis, quelle solution serait la plus "propre" ?

Merci beaucoup :)

Posté

Crée une colonne supplémentaire "critère de tri" dans laquelle tu stockes la version "nettoyée" (sans les articles, mais tant qu'à faire aussi entièrement en minuscules). Tu mets un index là-dessus, ça servira par la suite.

Jacques.

Posté

Quand tu dis "à la volée", tu veux dire qu'elle soit crée de façon implicite quand tu insères des données dans la base (mais qu'elle existe physiquement sur disque), ou qu'elle soit créée lors d'une requête?

Pour le premier cas, j'avais pensé à un trigger, mais je ne sais pas si ça existe dans mysql, et puis ça complique probablement un peu trop pour l'utilisateur moyen. Et je ne crois pas qu'un "default" puisse utiliser les valeurs d'autres colonnes (et les modifier à coups de replace ou d'expression régulières).

Pour le deuxième cas, c'est tout à fait possible, mais ça veut dire que pour lire une partie de la table (avec des offset/limit), il faut quand même que le moteur mysql lise toute la table avant de pouvoir faire la conversion, le tri, etc. Suivant la taille de la table et l'utilisation qui en est faite c'est plus ou moins handicapant...

Jacques.

Posté

J'avais fait quelque chose d'approchant pour le site d'Arlette ( http://www.lisons.info )

Je stocke dans la base de données le titre utilisé pour le tri. Cela consomme un peu d'espace supplémentaire, mais est par contre très léger en ressources et ne se fait qu'une fois au moment de l'entrée du bouquin.

La fonction telle que sur lisons :

        function sortable_title ($title) {
setlocale(LC_CTYPE,"french");
$pattern="/(^l[ea]?[s]?[' ]+)(.*)/i";
$replacement="\${2} (\${1})";
$title=preg_replace($pattern, $replacement, $title);
$title[0]=strtr(strtolower($title[0]), "âàäçéèêëîïôöùûü", "aaaceeeeiioouuu");
return ucfirst($title);
}

Je ne remplace que les articles le, la, les et l' (majuscules et minuscules) vu qu'il s'agit de titres en français...

Mais c'est assez simple d'y ajouter d'autres prépositions.

Posté

Salut

Merci beaucoup pour les réponses, ça me conforte dans l'idée que j'avais d'effectivement utiliser une deuxième colonne, et effectivement en minuscules. Concernant les problèmes de charge, je pensais convertir les noms au moment de l'insertion dans la base uniquement, plutôt que la parser régulièrement.

Merci encore, et désolé pour le retard de ma réponse: mon disque dur m'a laché <_<

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...