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

Fermé
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012 - Modifié par mtardieu le 2/07/2012 à 15:59
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012 - 3 juil. 2012 à 11:12
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 !

A voir également:

1 réponse

Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 juil. 2012 à 17:05
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 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 10:14
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 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
3 juil. 2012 à 10:16
Ca serait cool que tu donnes ta solution quand même...
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
3 juil. 2012 à 10:18
ps: les agrégats ne se mettent pas dans le group by :)
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 10:25
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 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 10:27
@vordano
Je n'ai pas compris ton commentaire
0