MySQL : SELECT spécial avec GROUP BY sur condition ?

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

je voulais savoir si quelqu'un sait si il est possible de faire un GROUB BY sur condition ...

Exemple : j'ai 2 champs (entre autre) dans une table : id et id_pere, et je voudrait grouper par id_pere si id_pere n'est pas null, sinon, si id_pere est null, on groupe pas...

Une requète qui pourrait donner

"SELECT * FROM table WHERE 1 GROUP BY id_pere IF id_pere !=0"

... si seulement c'était si simple... :(
Une idée ?! Merci !
 
WRInaute passionné
Bizarre comme "envie". Un group by va regrouper par id_pere dans ton cas. Tu auras ceux avec un id_pere null, ceux avec id_pere = 1, ...
Là tu chercherais pas plutôt à trier sur l'id père?
 
WRInaute accro
Dharius a dit:
je voulais savoir si quelqu'un sait si il est possible de faire un GROUB BY sur condition ...

Exemple : j'ai 2 champs (entre autre) dans une table : id et id_pere, et je voudrait grouper par id_pere si id_pere n'est pas null, sinon, si id_pere est null, on groupe pas...

Une requète qui pourrait donner

"SELECT * FROM table WHERE 1 GROUP BY id_pere IF id_pere !=0"

... si seulement c'était si simple... :(
Une idée ?! Merci !

Je ne suis pas sûr de bien comprendre, mais tu peux essayer:

SELECT COALESCE(id_pere,id),... FROM table GROUP BY 1

Si tu as plus de détails sur ce que tu cherches à faire ça pourrait aider...

Jacques.
 
WRInaute accro
A je savais pas qu'il y avait coalesce sur php, je l'apprends :), je croyais que c'était un truc à oracle -_- :D


Salut Dharius, alors pour que les choses soient claires, id_pere peut etre = 0 ou être NULL ? Car c'est complètement différent.

Je te l'aurais bien faite ta requête mais c'est pas très claire ton histoire de group by avec condition null ou non null :(. Explique nous plutôt clairement ce que tu veux récupérer parce que faire une requête sans connaitre ce qu'on doit obtenir, y a pas pire -_- :D

Donc tu as par exemple une table comme ceci:

id id_pere
-- -------
1 1
2 2
3 2
4 3
5 0
6 1
7 2
8 5
9 1
10 0

Tu veux que la requête te retourne quoi clairement ?

C'est bêtement ça que tu veux ? :

Code:
SELECT * FROM table WHERE id_pere != 0 GROUP BY id_pere
 
WRInaute accro
YoyoS a dit:
A je savais pas qu'il y avait coalesce sur php, je l'apprends :), je croyais que c'était un truc à oracle -_- :D

Ce n'est pas du php mais du SQL... Ceci dit, je suppose que ça existe avec mysql, mais j'en sais trop rien.

Sinon une autre alternative:

SELECT id_pere,... FROM table WHERE id_pere IS NOT NULL GROUP BY id_pere UNION ALL SELECT id_pere,... FROM table WHERE id_pere IS NULL

Enfin, toujours en supposant que j'aie vaguement compris ce qui est voulu...

Jacques.
 
WRInaute impliqué
Oui, je me suis mal exprimé : on groupe pas les résultats qui ont id_pere = 0 , par contre on groupe les autres qui ont un id_pere commun
 
WRInaute accro
Dharius a dit:
Oui, je me suis mal exprimé : on groupe pas les résultats qui ont id_pere = 0 , par contre on groupe les autres qui ont un id_pere commun

SELECT id_pere,... FROM table WHERE id_pere<>0 GROUP BY id_pere UNION ALL SELECT id_pere,... FROM table WHERE id_pere=0

Jacques.
 
WRInaute accro
Je savais pas non plus que les opérateurs ensemblistes fonctionnaient sur php, non mysql pardon ;p

A oui c'est l'INTERSECT qui ne va pas :)
 
Discussions similaires
Haut