Bonjour à tous,
Voilà j'ai un problème concernant une requête SQL assez tordu (en tout cas dans ma tête) mais je suis complètement bloqué...
Voilà j'ai les trois tables suivantes :
- individus (id, nom, prenom, age, etc..) qui correspond à des individus, assez banal quoi..
- ballons(id, couleur, etat, etc..) qui correspond à des ballons disponibles, assez banal aussi...
- possede(id, idIndividu, idBallon, etat) qui correspond à l'association des deux tables, sachant qu'un individu peut avoir plusieurs ballons et que son ballon peut changer d'état (dur, mou, HS)
Ce que je cherche à faire (avec MySQL et sans PHP) c'est de récupérer (en deux champs) :
- le nom de TOUT les individus dans le premier champ
- une valeur 'G' ou 'P' qui dépend des conditions suivantes :
- G pour ceux qui ont plus de 3 ballons blancs et qui sont durs
- P pour les autres
Alors avec ceci :J'arrive bien à récupérer le nom des individus qui ont gagné, en fait je récupère bien un tableau sous cette forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT i.nom, p.etat FROM individu i, ballon b, possede p WHERE i.id = p.idIndividu AND p.Individu = b.id AND b.couleur = 'BLANC' AND p.etat = 'DUR' GROUP BY i.nom HAVING COUNT(*) > 2Mais voici mes blocages :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5nom | etat ------------ xxx | DUR yyy | DUR zzz | DUR
- Mon premier problème c'est que je ne sais pas comment intégrer cette requête où il n'y a que les gagnants avec une autre requête comprenant aussi les perdants (tout les autres en fait)...
Pour cela je sens qu'il doit y avoir de l'imbrication mais je ne vois pas du tout comment...- Mon deuxième problème c'est que (puisque dans mon tableau final j'aurais aussi les perdants) je ne sais pas du tout comment faire pour que le deuxième chant ne corresponde pas à un champ d'une table mais à mon champ "statut" par exemple, en l'occurrence soit la valeur G ou soit la valeur P... Voilà un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7nom | statut ------------ aaa | P xxx | G bbb | P yyy | G zzz | G
Pour cela je me suis dit que je pourrais bien effectuer un IF sur un COUNT... Si le COUNT est > 2, la clause THEN me donnera 'G' et la clause ELSE me donnera le 'P'... Le problème c'est que déjà il y a deux instructions IF dans MySQL
Alors voilà après avoir posé mon problème, à votre avis c'est ma requête qui est tordu ou ma BDD ?
Comment faire à votre avis pour aboutir au résultat ?
Merci d'avance !
Partager