|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
Bonjour,
Pfiou, je sens que mon cas va être difficile à résumer... J'ai une requête qui ressemble à ça, que je nomme requete1 (voir à la fin du post) : Code :
Je peux aussi la lancer avec deux autres éléments, element3 et element4... Le résultat de la requête est ainsi : Code :
Code :
Ce qui m'intéresse ici c'est donc de récupérer le résultat du nombre de row de chaque requête donc "1 row" pour la première et "2 rows" pour la seconde. Je n'arrive pas à ajouter un "count" sur la requête de base pour compter ce nombre de row. Du coup je suis passé par une vue et cela fonctionne mais cela me semble un peu lourd : Code :
Code :
Code :
une idée pour faire le count directement dans ma requete1 ? j'ai essayé mais j'ai une erreur de syntaxe... |
||||||||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Connais-tu la clause WITH ROLLUP de GROUP BY ? Par ailleurs je pense que, plutôt qu'avec des sous-requêtes comme argument d'opérateurs IN, les performances seraient meilleures avec des jointures externes.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#3 | ||
![]() ![]() |
Apparemment, fabrice91, tu as besoin d'apprendre les jointures !
Au passage, les valeurs textuelles s'écrivent entre apostrophes et pas entre guillemets. Les trois sous-requêtes de ta requête donneraient semble t-il ceci : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
Citation:
Pour les jointures, je suis on ne peux plus d'accord... Citation:
Mais bon, j'ai déjà commencé à migrer des requêtes en jointures donc je m'y mets petit à petit... Humph, pas tout à fait, au lieu d'avoir 2 rows pour un de mes exemples, j'en ai 3 et le troisième correspond à priori à celui qui est supprimé avec mon deuxième group by... |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Justement à faire le comptage global que tu demandais.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
Ah ok mais d'après ce que j'ai vu, cela sors sous forme d'une ligne supplémentaire donc si j'ai 2 rows normalement, en ajoutant le WITH ROLLUP j'aurai une ligne supplémentaire indiquant le nombre de rows...
mais cette solution ne me donne pas DIRECTEMENT par le select lui-même le nombre de rows... |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
bon alors voilà une petit analogie :
3 tables : element_name (id int, name varchar) single (id int, name varchar) assemblage (id int, element_name_id int, single_id int) avec element_name_id et single_id des clés étrangères sur les id respectivement des tables element_name et single. Exemple d'element_name : skateboard, voiture, moto, velo Exemple de single : guidon, volant, roue, frein, porte Je vais avoir comme "assemblage"s : skateboard/roue velo/roue velo/frein velo/guidon moto/roue moto/frein moto/guidon voiture/roue voiture/frein voiture/volant voiture/porte La question posée par ma requête est : - combien de "assemblage" sont constitués EXACTEMENT de roue+frein+guidon :réponse = 2 (velo et moto) - combien de "assemblage" sont constitués EXACTEMENT de roue : réponse = 1 (skateboard) |
|
|
00
|
|
|
#8 | ||||||
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
L'idée de base c'est d'avoir a partir de la table assemblage
une table avec un groupe de ce genre skateboard : roue velo : roue, frein, guidon moto : roue, frein, guidon voiture : roue, frein, volant, porte Pour commencer, si on veux que notre requête reçois comme paramètres des noms et non des codes, on fait un LEFT JOIN entre la table assemblage, element_name et single Code :
Code :
Code :
Pour le dernier filtre, il faut juste respecter l'ordre alphabétique car le résultat de group_concat est une chaine de caractères d'élément single triées et donc il faut la comparer aussi avec une chaine qui respecte les mêmes contraintes. C'est ca ou bien mettre toutes les combinaisons possibles avec un OR. |
||||||
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : juin 2007 Messages : 198 ![]() |
merci beaucoup !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com