[MySQL] 2 Count() sur deux tables différentes.

2 Count() sur deux tables différentes. [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 23-07-2004 à 14:04:30    

Salut !
 
J'aimerais avoir le nombre d'enregistrement de deux tables avec une requete.
 
Je pensais donc a un:
 
$req="SELECT DISTINCT COUNT(t1.id), COUNT(t2.id) FROM t1,t2";
 
Seulement il faut impérativement un GROUP BY, et dans ce cas, ca me "casse tout".
Exemple:
t1=4 enregistrements
t2= 3 enregistrements
$req="SELECT DISTINCT COUNT(t1.id), COUNT(t2.id) FROM t1,t2 GROUP BY t1.id";
Résultat:
Count(t1.id)=4
Count(t2.id)=4
 
Faut il forcément que je fasse deux requetes ?
 
Merci d'avance.

Reply

Marsh Posté le 23-07-2004 à 14:04:30   

Reply

Marsh Posté le 23-07-2004 à 15:09:39    

tu peux faire ca avec une requête et "UNION"
si jamais tu utilises une version de MySQL qui ne gère pas l'union regarde là pour le bricoler toi même :
http://codewalkers.com/tutorials/33/2.html

Reply

Marsh Posté le 23-07-2004 à 15:48:43    

Je n'arrive pas a faire fonctionner correctement le substitue de UNION
 
Voilà ma requete:
 
SELECT COUNT(alliance_candidat.id), COUNT(alliance_exclusion.id)
FROM _dummy as D
LEFT JOIN alliance_candidat ON (D.num=0)
LEFT JOIN alliance_exclusion ON (D.num=1)  
 
Actuellement j'ai 3 enregistrements dans alliance_candidat et 4 enregistrements dans alliance_exclusion.
 
Résultat de la requete:
 
COUNT(alliance_candidat.id)  COUNT(alliance_exclusion.id)  
0                                                            4


Message édité par smilm le 23-07-2004 à 15:48:52
Reply

Marsh Posté le 23-07-2004 à 16:13:46    

UNION n'est dispo qu'à partir de MySQL 4. Si tu es encore en 3.23, ça ne marchera pas :/
 
Par nature, la jointure va te donner un résultat erroné :/ Il faut que tu fasses 2 requêtes séparées :/


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 23-07-2004 à 16:20:33    

drasche a écrit :

UNION n'est dispo qu'à partir de MySQL 4. Si tu es encore en 3.23, ça ne marchera pas :/
 
Par nature, la jointure va te donner un résultat erroné :/ Il faut que tu fasses 2 requêtes séparées :/


 
Zieute le lien de mathix. Je voulais utilisé sa technique.
Mais bon, peu importe, une requete SQL de plus hop!

Reply

Marsh Posté le 23-07-2004 à 16:28:32    

essaye ca :  

Code :
  1. SELECT COUNT(alliance_candidat.*), COUNT(alliance_exclusion.*)
  2. FROM _dummy as D
  3. LEFT JOIN alliance_candidat ON (D.num=0)
  4. LEFT JOIN alliance_exclusion ON (D.num=1)


Message édité par mathix le 23-07-2004 à 16:29:04
Reply

Marsh Posté le 23-07-2004 à 16:35:01    

ou peut etre ca :

Code :
  1. SELECT COUNT(alliance_candidat.*), COUNT(alliance_exclusion.*)
  2. FROM _dummy as D
  3. LEFT JOIN alliance_candidat ON (D.num=0)
  4. LEFT JOIN alliance_exclusion ON (D.num=1)
  5. GROUP BY D.num


 
sinon fait juste un test avec la requete suivante et dis nous ce que tu obtiens

Code :
  1. SELECT *
  2. FROM _dummy as D
  3. LEFT JOIN alliance_candidat ON (D.num=0)
  4. LEFT JOIN alliance_exclusion ON (D.num=1)


 

Reply

Marsh Posté le 23-07-2004 à 17:46:12    

sur tes 3 propositions:
les 2 premieres ne marche pas (wrong syntax)
La 3e renvoi ca:
 
num  id  id_alliance  id_membre  needed  avoir  compteur  id  id_alliance  id_membre  id_demandeur  needed  avoir  compteur  
1 NULL NULL NULL NULL NULL NULL 1 1 7 11 0 0 0  
1 NULL NULL NULL NULL NULL NULL 2 2 5 3 0 0 0  
1 NULL NULL NULL NULL NULL NULL 3 1 9 8 0 0 0  
1 NULL NULL NULL NULL NULL NULL 4 9 46 0 4 0 0  
2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL  
 
 
Rien de passionnant je pense.

Reply

Marsh Posté le 23-07-2004 à 17:49:53    

drasche a écrit :

UNION n'est dispo qu'à partir de MySQL 4. Si tu es encore en 3.23, ça ne marchera pas :/
 
Par nature, la jointure va te donner un résultat erroné :/ Il faut que tu fasses 2 requêtes séparées :/


Par nature la jointure ça rame ! Pour des raisons de perfs mieux vaut faire 2 requêtes toutes simples et facile à maintenir et à comprendre. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed