[MYSQL] Pb de count(*) = 0 avec group by

mtardieu Messages postés 15 Statut Membre -  
mtardieu Messages postés 15 Statut Membre -
Bonjour,

J'ai une base de données, où il y a plusieurs équipes, plusieurs produits, et d'autres champs non nécessaires pour le problème. Je ne possède qu'une table qui s'appelle article_database.


Dans cet exemple, j'ai 3 équipes : AB1 AB2 et PNE, ainsi que 4 produits : AeRE, AeTM, ARD, CMT.
J'aimerais connaitre le nombre d'article, pour chaque produit et pour chaque équipe. J'effectue donc cette requête mysql :

SELECT 'Team' , 'Product' , COUNT(*) AS nb_article FROM 'article_database'WHERE 'Team'IN ('AB1','AB2','PNE') AND 'Product'IN ('AeRE', 'AeTM','ARD','CMT') 
GROUP BY 'Team' , 'Product'


J'ai ce tableau qui est généré :

Team----- Product -- nb_article
AB1------- AeRE ----- 362
AB1------- AeTM ----- 569
AB1------- CMT ------ 6
AB2------- AeRE ----- 90
AB2------- AeTM ----- 55
AB2------- ARD ------ 20
AB2------- CMT ------ 4
PNE------- AeRE ----- 34
PNE------- AeRE ----- 51

Comme vous pouvez le voir, l'équipe AB1 a 0 article ARD. L'équipe AB2 possède des articles de chaque produit et l'équipe PNE ne possède pas d'article ARD et CMT.
Mais le group by permet que de sélectionner des champs non nuls.
Or, j'ai besoin absolument de rajouter les lignes qu'il manque avec des 0, afin d'obtenir ceci :


Team----- Product -- nb_article
AB1------- AeRE ----- 362
AB1------- AeTM ----- 569
AB1------- ARD ------ 0
AB1------- CMT ------ 6
AB2------- AeRE ----- 90
AB2------- AeTM ----- 55
AB2------- ARD ------ 20
AB2------- CMT ------ 4
PNE------- AeRE ----- 34
PNE------- AeRE ----- 51
PNE------- ARD ------ 0
PNE------- CMT ------ 0

J'aimerais savoir si quelqu'un a une syntaxe précise de mysql qui peut faire en sorte d'afficher des 0 afin de compléter mon tableau.

Merci d'avance !

1 réponse

Melooo Messages postés 1476 Statut Membre 84
 
Salut,
Vraiment pas sur de ce que je vais te dire mais essayes de regrouper par le nombre d'article
0
mtardieu Messages postés 15 Statut Membre
 
Merci de ton aide, mais nan ça ne marche pas =)

J'ai trouvé une solution entre temps. Le topic peut être clos.
0
Melooo Messages postés 1476 Statut Membre 84
 
Ca serait cool que tu donnes ta solution quand même...
0
vordano Messages postés 1981 Statut Membre 316
 
ps: les agrégats ne se mettent pas dans le group by :)
0
mtardieu Messages postés 15 Statut Membre
 
La solution est celle ci :

$requete distinct 1 qui me permet de stocker les noms des team par exemple (j'ai besoin de ces infos de tte façon pour autre chose)
$v0=AB1
$v1=AB2
$v2=PNE
$team_number = 3

Idem pour product :
$z0=AeRE
$z1=AeTM
$z2=ARD
$z3=CMT
$product_number=4

Je scan mon tableau $r en bouclant sur les team et produit (j'ai donc 4*3 = 12 instructions)

$row=0;
for ($m=0;$m < $team_number;$m++)
{
	for ($k=0;$k < $product_number;$k++)
	{		
		if ($r[$row][0]==${v.$m} and $r[$row][1]==${z.$k})
		{	
			$s[$row+$offset][0]=${v.$m};
			$s[$row+$offset][1]=${z.$k};
			$s[$row+$offset][2]=$r[$row][2];
			$row++;
		} 
		else 
		{
			$s[$row+$offset][0]=${v.$m}; 
			$s[$row+$offset][1]=${z.$k}; 
			$s[$row+$offset][2]=0; 
			$offset++;
		}
	}
}


Mon tableau s est donc un tableau de 4*3 lignes, avec des 0 lorsque la condition colonne0 = team $m et colonne 1 = product $k n'est pas remplie
0
mtardieu Messages postés 15 Statut Membre
 
@vordano
Je n'ai pas compris ton commentaire
0