Tri alphabétique groupé par lettre

  • Auteur de la discussion Auteur de la discussion code
  • Date de début Date de début
WRInaute impliqué
Bonjour,

me voici confronté à un nouveau problème :

je souhaiterais que les résultats d'une requete mysql soient groupés par ordre alphabétique et par groupe de lettre.

Je suis certain qu'il est possible d'effectuer une opération plus simple que 26 fois la même requete qui sélectionne à chaque fois les mots qui commencent par a, puis b, puis c etc...

Mais je voudrais bien mettre en place une solution plus "propre"

En outre, je pense qu'il faudrait qu'il y ait un break pour afficher d'abord tous les mots commençant par a, puis reprendre pour b...

Quelqu'un a-t-il une idée
 
Nouveau WRInaute
code a dit:
ordre alphabétique et par groupe de lettre.

Je suis certain qu'il est possible d'effectuer une opération plus simple que 26 fois la même requete qui sélectionne à chaque fois les mots qui commencent par a, puis b, puis c etc...

Mais je voudrais bien mettre en place une solution plus "propre"

En outre, je pense qu'il faudrait qu'il y ait un break pour afficher d'abord tous les mots commençant par a, puis reprendre pour b...

Quelqu'un a-t-il une idée

Ma methode pourrait s'apparenter à du bricolage mais elle devrait marcher.

Tu effectues ta requete en appliquant un order by.
Ta liste de resultat est par consequent triée

exemple :
select nomColonne from table ORDER BY nomColonne ASC"

Par la suite lorsque tu affiches ta liste de resultat tu effectues un test en php pour savoir si la premiere lettre a été modifié

Si lettre identique à la precedente
-----afficher ligne
Sinon
-----appliquer separation
-----afficher ligne
 
WRInaute impliqué
Malek-78 a dit:
Par la suite lorsque tu affiches ta liste de resultat tu effectues un test en php pour savoir si la premiere lettre a été modifié

Si lettre identique à la precedente
-----afficher ligne
Sinon
-----appliquer separation
-----afficher ligne

C'est exactement ce à quoi j'avais pensé... Maintenant je bloque sur comment effectué ce test en php :lol:
 
Nouveau WRInaute
code a dit:
C'est exactement ce à quoi j'avais pensé... Maintenant je bloque sur comment effectué ce test en php :lol:

Utilise la methode substr() de php.

Tu trouveras ton bonheur ici:
http://www.manuelphp.com/php/function.substr.php

Cette methode te permettra de recuperer un "morceau" d'une chaine de characteres.

L'algo donnerait à peu pret ca :

$requete = mysql_query ("SELECT nomColonne FROM table ORDER BY nomColonne ");

//variable permettant de stocker la premiere lettre de la colonne "nomColonne"
$lettre_tampon = -1;

//En bcle sur les resultats
while ($res = mysql_fetch_object($requete))
{
$lettre_tester= substr($res->nomColonne , 0, 1);

//lettre precedente differente de la lettre suivante
if ($lettre_tester!= $lettre_tampon)
{
appliquer separation
afficher ligne
// Sauvegarde de la nouvelle lettre
$lettre_tampon= $lettre_tester;
} else{

afficher ligne

}

J'ai pas testé le resultat mais cela devrait etre correcte.

Il est à noter qu'avec cet algo, tu appliqueras tjs une separation avant le premier bloc car la valeur tampon est initialiser par defaut à -1.
 
WRInaute impliqué
Je te remercie : c'est exactement ce que je cherchais. ça marche impeccable. Il faut juste que je vois pourquoi il me trouve un "7" comme première lettre avec aucun résultat alors qu'il devrait y en avoir un (et c'est peut-être ça le problème justement, c'est qu'il y en a seulement un dans la table)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut