France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 511 membres enregistrés - 2 069 318 posts - 122 026 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Bases de données
                Group By et tri
58 connectés(record : 2799 le 29 May 2016 - 15 h 34)

Vous devez vous connecter pour répondre au topic.
Group By et tri

Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 18 July 2006 - 12 h 22 m 27 s
Bon, j'expose mon problème.

J'ai donc une table, donc je veux afficher les enregistrements.

Certains de ces elements sont regroupés à l'affichage.

Dans ma requête, je trie mes éléments selon un index.

Donc en gros, j'ai

    Code     
1. SELECT `mes_champs`
2. FROM `ma_table`
3. WHERE `mes_conditions`
4. GROUP BY `mon_champ_de_regroupement`
5. ORDER BY `mon_tri`;


Jusque là rien de compliqué.
J'obtiens bien ma liste, avec un seul élément affiché pour ceux qui sont groupés.

Seulement, j'aimerais récupéré un élément précis dans les groupes, donc pouvoir trié les résultats du group by. Et là je ne sais pas comment faire pour obtenir l'élément groupé que je désiré.
(Exemple : je trie le tout par rapport au nom, je vais obtenir pour un groupe l'element correspondant au premier nom, alors que je voudrais le plus récent)

Le tout sans changer le tri global bien sûr.

J'ai essayé avec des HAVING sur le group by, mais je n'ai rien obtenu :(






grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 18 July 2006 - 15 h 24 m 20 s
a mon avis faut passer par une sous requete non ?



:firefox: :ol:

Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 18 July 2006 - 16 h 09 m 50 s
Euh une sous requete permet de sélectionner des éléments pour une condition, mais je ne vois pas le rapport avec le tri :chepa:




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 18 July 2006 - 16 h 13 m 28 s
ah oui, je viens de relire, j'avais mal compris en effet :jap:

ben sinon moi je ferai en 2 fois, 1ere requete recup les groupes, 2eme requete les trie puis affichage, mais bon c'est pas top, il doit y avoir mieux...



:firefox: :ol:

Lonewolf_v
The Dead LoneWolf - (-[S4n5.T3aM]-) - (-[T3aM.Be4Uf]-)

Messages : 17 689
Inscrit le 05/08/02
Ville : Grenoble
Non connecté
  Posté le 18 July 2006 - 16 h 28 m 53 s
bin un group by multiple ou j'ai pas compris la question?



le blog de lonewolf

bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 July 2006 - 17 h 32 m 03 s
erel, poste ta requête, si c'est du sql standard je pourrais peut-être t'aiguiller ?
parce que j'ai pas compris la question, ou dit autrement ça me semble tellement trivial que je reste coi... Donc je me dis que je n'ai certainement pas capté le pb !



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 18 July 2006 - 17 h 33 m 07 s
Wai t'as pas compris :)

On va faire un exemple :




Exemple à la con

IDNOMGROUPE
1ABCD1
2ACDE2
3AAAB3
4AABC2


Bon, imaginons maintenant une s"lection par ordre alpha, en groupant par groupe

On obtient :



Résultat obtenu

IDNOMGROUPE
3AAAB3
4AABC2
1ABCD1


Mais voilà, parmis les lignes appartenant au groupe 2, je veux celle ayant le plus petit ID, donc :



Resultat que je veux

IDNOMGROUPE
3AAAB3
1ABCD1
2ACDE2




bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 18 July 2006 - 17 h 38 m 43 s


Le 18 juillet 2006 - 17 h 33, Erel69 a écrit :
Wai t'as pas compris :)

On va faire un exemple :




Exemple à la con

IDNOMGROUPE
1ABCD1
2ACDE2
3AAAB3
4AABC2


Bon, imaginons maintenant une s"lection par ordre alpha, en groupant par groupe

On obtient :



Résultat obtenu

IDNOMGROUPE
3AAAB3
4AABC2
1ABCD1


donc on va dire :
select id, nom, groupe from TABLE group by groupe order by nom;



Mais voilà, parmis les lignes appartenant au groupe 2, je veux celle ayant le plus petit ID, donc :



Resultat que je veux

IDNOMGROUPE
3AAAB3
1ABCD1
2ACDE2


je commence à voir. Il faut sans doute utiliser la fonction min, un truc du genre :
select min(id), nom, groupe from TABLE group by groupe, nom order by nom;
ça te sortir pour chaque groupement (groupe, nom), l'ID minimum.

c'est pas garanti du tout (pas testé, chui à la maison) mais c'est dans l'esprit.


Edit : quand tu as une fonction du type min, tu dois grouper par toutes les autres colonnes.


Message édité 1 fois, la dernière par bernie38 le 18 July 2006 - 17 h 39.

La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 19 July 2006 - 11 h 51 m 39 s
J'ai essayé en effet avec MIN() mais j'ai pas réussi :(




bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 23 July 2006 - 11 h 21 m 51 s
tu n'as pas réussi : ça donne pas le résultat attendu ? ou la requete renvoie une erreur ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Erel69
- Ancien Modérateur -
Fantôme
Officiel

Messages : 19 554
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 23 July 2006 - 13 h 28 m 04 s
Pas d'erreur, mais ce n'est pas le bon résultat




bernie38
Waldorf (le pote à Statler)

Messages : 11 452
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 25 July 2006 - 12 h 58 m 54 s


Le 23 juillet 2006 - 13 h 28, Erel69 a écrit :
Pas d'erreur, mais ce n'est pas le bon résultat

pourtant, selon le tableau des données que tu as posté et le tableau de ce que tu veux obtenir, ça me semble la bonne requête, non ? Tu obtiens quoi au juste ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


defrance
PI-nary rules

Messages : 813
Inscrit le 05/09/03
Ville : Lyon
Non connecté
  Posté le 13 August 2006 - 09 h 55 m 04 s
Salut, il y a une erreur dans l'exemple que tu donnes,
tu ne peux regrouper que sur des champs qui ont des valeurs identiques.
Ton regroupement donnerai alors



Résultat obtenu

NOMGROUPE
AAAB3
AABC2
ABCD1


Maintenant si c'est le groupe 2 qui t'intéresse il faudra te fendre d'une seconde requette pour accèder au plus petit id
tu peux aussi filtrer directement sur le groupe 2 et demander le min de l'id là ca marche



La connerie c'est la décontraction de l'esprit, c'est pour cela que je m'autorise à faire le con.
Serge Gainsbourg


grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 14 August 2006 - 10 h 15 m 45 s
ah ben voila, ca me fait p^laisir de voir que quelqu'un d'autre ferait ca en 2 requetes :D

alors erel ? t'as trouve une soluce pr faire en une seule finalement ?



:firefox: :ol:

Page genérée en 0.3485 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL | Actualité ADSL | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory