Dudu Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 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 | Abba2 | ZZ Top3 | The Eagles4 | Led Zeppelin5 | 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 jcaron, c'est pas possible de créer cette colonne à la volée dans la requête, avec une expression régulière ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 Je parlais dans la requête de sélection, effectivement. Comme tu le dis, ça doit être gourmand en ressources. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 13 Novembre 2009 Partager Posté 13 Novembre 2009 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dudu Posté 18 Novembre 2009 Auteur Partager Posté 18 Novembre 2009 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é Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant