requete sql

Nouveau WRInaute
Bonjour,

j'ai une requete toute bete a faire en sql, et je dois faire la meme sur deux tables differentes.

Code:
SELECT count(id) total,commune FROM tab1 WHERE cp LIKE '01%'  GROUP BY commune;

SELECT count(id) total,commune FROM tab2 WHERE cp LIKE '01%'  GROUP BY commune;

Est-ce qu'il y a moyen de faire ces deux requetes en une seule en mySQL ?

Merci :)
 
WRInaute occasionnel
Comme ça ?

Code:
select count(id) total,commune from tab1 where cp like '01%' group by commune
union all
select count(id) total,commune from tab2 where cp like '01%' group by commune
 
WRInaute discret
Salut,

@sgaze : sais-tu comment est renvoyé le résultat de cette requête car je ne sais pas si mv_murph veut un ou 2 résultats distincts.

A+

Doug
 
Nouveau WRInaute

MySQL me retourne une erreur :
Code:
Something is wrong in your syntax près de 'union all select count(id) total,commune from 94072_7 where cp l' à la ligne 1.

Je crois que la version mySQL que j'ai n'aime pas les UNION ALL :/

je ne sais pas si mv_murph veut un ou 2 résultats distincts

en fait je ne veux qu'un resultat.
 
WRInaute discret
Tu ne veux qu'un résultat, ok, mais ce dernier est-il sensé être le même ou non ? Si oui, tu n'as qu'à faire une seule de ces 2 requêtes :-D. Sinon, je ne comprends pas tout, est-ce une moyenne des 2 ?

Sinon essaie un truc dans le genre, on ne sait jamais :

Code:
SELECT COUNT(id) total,commune FROM tab1, tab2 WHERE tab1.cp LIKE '01%' AND tab2.cp LIKE '01%' GROUP BY commune

A+

Doug
 
Nouveau WRInaute
en fait c pas un moyenne que je veux faire mais le total des deux count(id), le "commune" a cote me permet juste d'afficher le nombre de resultat par commune.
 
WRInaute discret
Code:
select count(tab1.id) tab1.total,tab1.commune from tab1 where tab1.cp like '01%' group by commune
union
select count(tab2.id) tab2.total,tab2.commune from tab2 where tab2.cp like '01%' group by commune

Une version un peu modifiée par rapport à celle de sgaze.

On va finir par trouver.

A+

Doug
 
WRInaute occasionnel
mv_murph a dit:
Je crois que la version mySQL que j'ai n'aime pas les UNION ALL :/

Pourtant UNION ALL c'est basique au niveau SQL ... En tout cas moi c'est ok avec mysql 4.0
Essaie de mettre les sous-requêtes entre parenthèses ?

> dasikund : le réultat sera du type :
1 commune1 (tab1)
1 commune2 (tab1)
2 commune3 (tab1)
1 commune4 (tab1)
5 commune5 (tab1)
1 commune1 (tab2)
4 commune6 (tab2)
...

Bref, le nombre de fois qu'on a des id différents pour chaque commune

Le UNION ALL ne peut pas être dans tous les cas remplacé par UNION car ce dernier opérateur élimine les enregistrements en double dans les deux requêtes (comme [1 commune1] qui se retrouve dans tab1 et tab2)




SELECT COUNT(id) total,commune FROM tab1, tab2 WHERE tab1.cp LIKE '01%' AND tab2.cp LIKE '01%' GROUP BY commune
Attention au risque de produit cartésien avec cette requête
 
Nouveau WRInaute
Finalement le UNION ALL marche.

mias il reste un problème que je voudrais resoudre : en faisant UNION ALL j'affiche le resultat de la 1° requete puis celui de la 2°.
Seulement j'ai des communes communes (enfin qui se retrouvent dans les resultats de chaque requete) Est ce qu'il est possible d'additionner les resultats de ces communes directement en SQL ou je dois le faire en PHP ?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut