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) :
Elle me permet de savoir si un mélange de deux éléments ("element1" et "element2") existe dans ma base.Code:
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;
Je peux aussi la lancer avec deux autres éléments, element3 et element4...
Le résultat de la requête est ainsi :
-> j'ai un seul mélange (d'id 374) qui contient à la fois element1 et element2 (nb=2)Code:
1
2
3
4
5
6 +----------+----+ | element | nb | +----------+----+ | 374 | 2 | +----------+----+ 1 row in set (0.00 sec)
-> j'ai deux mélanges (d'id 340 et 447) qui contient à la fois element3 et element4 (nb=2)Code:
1
2
3
4
5
6
7 +---------+----+ | element | nb | +---------+----+ | 340 | 2 | | 447 | 2 | +------- -+----+ 2 rows in set (0.00 sec)
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 :
Dans le premier cas j'obtiens :Code:
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 ;
et dans le second :Code:
1
2
3
4
5
6 +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (2.89 sec)
ce qui est parfait !!!Code:
1
2
3
4
5
6 +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (2.92 sec)
une idée pour faire le count directement dans ma requete1 ?
j'ai essayé
mais j'ai une erreur de syntaxe...Code:select count (*) (requete1) ;