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) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| SELECT element, count(element) AS nb
FROM compound
WHERE element IN
(
SELECT element
FROM compound
WHERE single IN
(
SELECT id FROM single
WHERE element IN
(
SELECT id
FROM element_name
WHERE name IN ("element1","element2")
)
)
GROUP BY element
HAVING count(element) = 2
)
GROUP BY element
HAVING nb=2; |
Elle me permet de savoir si un mélange de deux éléments ("element1" et "element2") existe dans ma base.
Je peux aussi la lancer avec deux autres éléments, element3 et element4...
Le résultat de la requête est ainsi :
1 2 3 4 5 6
| +----------+----+
| element | nb |
+----------+----+
| 374 | 2 |
+----------+----+
1 row in set (0.00 sec) |
-> j'ai un seul mélange (d'id 374) qui contient à la fois element1 et element2 (nb=2)
1 2 3 4 5 6 7
| +---------+----+
| element | nb |
+---------+----+
| 340 | 2 |
| 447 | 2 |
+------- -+----+
2 rows in set (0.00 sec) |
-> j'ai deux mélanges (d'id 340 et 447) qui contient à la fois element3 et element4 (nb=2)
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 :
1 2 3
| create view v as select element, count(element) as nb from compound where element in ( select element from compound where single in ( select id from single where element in (select id from element_name where name in ("element1","element2") )) group by element having count(element)=2) group by element having nb=2;
select count(*) from v ;
drop view v ; |
Dans le premier cas j'obtiens :
1 2 3 4 5 6
| +----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (2.89 sec) |
et dans le second :
1 2 3 4 5 6
| +----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (2.92 sec) |
ce qui est parfait !!!
une idée pour faire le count directement dans ma requete1 ?
j'ai essayé
select count (*) (requete1) ;
mais j'ai une erreur de syntaxe...
Partager