xpatval Posté 3 Décembre 2006 Posté 3 Décembre 2006 'soir, Un souci d'ordre de tri me fait poster, je m'explique: Une requête simple entre plsuieurs tables avec jointure, pour laquelle je souhaite une récupération triée sur deux champs. Le premier tri devant se faire par le champ "libelle" , le deuxième par un champ date: $mysql->query("SELECT id_article, libelle, date, titre FROM rub_sport, ssrub_sport, article where article.id_rub_sport = rub_sport.id_rub_sport and article.id_ssrub_sport = ssrub_sport.id_ssrub_sport and rub = 'rubrique_1' ORDER BY date DESC"); Le champ date correspond à la date d'insertion de l'enregistrement. Je souhaiterai afficher les titres correspondant à un libellé, en ne faisant apparaître qu'une fois (à l'affichage) le libellé, autrement dit: Libellé_1 Titre_1 (du libellé_1) Titre_2 ((du libellé_1) Titre_3 (du libellé_1) Libelle_2 Titre_1 (du libellé_2) Titre_2 (du libellé_2) Titre_2 (du libellé_2) Etc. Or, si j'ajoute une clause GROUP BY libelle, avant l'ORDER BY, tout foire. Pourriez-vous m'aidez ? Merci, xpatval
TheRec Posté 3 Décembre 2006 Posté 3 Décembre 2006 Bonsoir, Pour schématiser, la clause GROUP BY ne permet pas directement d'obtenir les résultats que tu souhaites. Elle est utilisée pour permettre au fonction d'agrégation (SUM, AVG, etc.) d'être exécutée individuellement chaque valeur d'une certaine colonne. Cette partie de ce cours sur SQL t'expliquera mieux (et par l'exemple) ce dont il est question. Pour réaliser ce que tu veux, tu peux effectivement utiliser GROUP BY pour récupérer tous les libellés (Libellé_1, Libellé_2, etc.) et éventuellement des "statistiques" qui y sont liées (Nombre de titres, etc.) et ensuite avec le langage de programmation que tu utilises (PHP) parcourir les résultats et obtenir les titres pour chaque libellé. C'est une solution assez coûteuse au niveau des ressources MySQL (une requête pour les libellés... puis une requête par libellé... pour une utilisation à petite échelle pourquoi pas :S). Sinon la solution du ORDER BY semble la plus appropriée... ensuite à toi de réaliser la partie logique qui en parcourant les résultats "séparera" les libellés (il suffit de stocker le dernier libellé et le comparer au libellé courant de le boucle... s'il est différent tu effectue une séparation). Cette solution est très peu coûteuse au niveau des ressources. Bonne continuation. P.S. : Le ORDER BY serait : ORDER BY libelle ASC, date DESC Étant donnée que tu souhaite trier les éléments également par date.
xpatval Posté 4 Décembre 2006 Auteur Posté 4 Décembre 2006 La partie logique était ok. Seule la requête pêchait... Merci de ta (bonne) réponse. C'est tellement simple que passer du temps sur ce genre d'anerie (s'égarer dans la solution) est foncièrement énervant... xpatval
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant