Problème d'affichage sur 2 requette

Résolu/Fermé
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 - 7 mai 2009 à 17:05
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 - 12 mai 2009 à 13:58
Bonjour,


j'ai un problème d'affichage sur 2 requettes les donnée quel me renvoit ne sont pas complete

voilà le resultat que sa me met :


Pays_____Prestataire____V G_________Commandes____C.A___________Mmc
_______________________100683_______11512________571055 euro___49.61
________1st____________829__________11___________1459 euro_____ 132.64
________adc____________119
________adw ___________23232
________aff____________212776
________bly____________8_____________23__________1879 euro_______81.68
________cm_____________222
________him____________2073
________StV____________1399
________tes ___________1
________xxx____________9 



et j'ai eu ce résultat avec ce code:

<?php include("application_top.php");?>
<html>
<head>
</head>
<body>
	<table border="1">
		<tr style="text-align: center; background-color:#FFAD5B; font-weight:bold;">
			<th> Pays </th>
 <th> Prestataire </th>
			<th> V G </th>
			<th> Commandes </th>
 <th> C.A </th>
 <th> Mmc </th>
		</tr>
<?php
	// REQUETE 1 : 
	$query = "SELECT substr(customers_from, 1, 3) AS Origin, 
 COUNT(*) AS effectif_vg
FROM customers 

GROUP BY Origin ";
	$result_vg = mysql_query($query) ;
	
	

					
	
while ($row = mysql_fetch_array($result_vg)) 
{ 
?>
<tr>
			<td style="background-color:#CCCCCC;"> </td>
 <td style="text-align:center;"> <?php echo $row['Origin'] ?> </td>
			 <td style="text-align:center;"> <?php echo $row['effectif_vg'] ?> </td>
			
				
				
<?php
				// REQUETE 2 : 		
			$query_produit = 
					" SELECT substr(customers_from, 1, 3) AS Origin,
					 COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
					 AVG(co.commandes_montant) AS Mmc 
						FROM customers cu
						INNER JOIN commandes co 
						ON cu.customers_id=co.customers_id 
						WHERE co.commandes_status='1' 
						and customers_from='".$row['Origin']."'
						GROUP BY Origin ";
							
							$result = mysql_query($query_produit) ;	
					
	while ($row = mysql_fetch_array($result)) 
	{ 
					
?>
	 
				 <td style="text-align:center;"> <?php echo $row['command'] ?> </td>
			 <td style="text-align:center;"> <?php echo round($row['command']*$row['Mmc']) ?> euro </td>
 <td style="text-align:center;"> <?php echo round($row['Mmc'] ,2) ?> </td>
 
	
<?php
} 	
	}
?>
</table>
</body>
</html>



donc si quelqu'un arrive a voir l'erreur ce serai cool car la j'en peu plus merci
A voir également:

10 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
7 mai 2009 à 17:29
Bonjour Siniper,

Je n'ai pas testé ma réponse, mais je dirais à première vue que le fait d'utiliser deux fois la même variable $row dans deux boucles while différentes n'est pas la meilleure solution. J'essayerai de remplacer dans la deuxième boucle while la variable $row par $row1 ainsi que dans les lignes suivantes.

A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 09:17
Je te remerci christounet

Mais j'avais déjà essayé $row1 d'ailleur je sai pas pourquoi je l'avai pas arrangé mais c'est pas sa le problème

Merci en tous cas de t'être penché dessu
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 10:39
après avoir modifié mon code j'ai toujours un problème sa me sort que 3 ligne alors que je devrai en avoir minimum 5

<?php
	
	// REQUETE 1 : 
	$query = "SELECT substr(customers_from, 1, 3) AS Origin, 
       COUNT(*) AS effectif_vg
FROM customers 

GROUP BY Origin ";
	$result_vg = mysql_query($query) ;
		
	
 
while ($row = mysql_fetch_array($result_vg)) 
{  

 	// REQUETE 2 : 		
			$query_produit = 
					" SELECT substr(customers_from, 1, 3) AS Origin,
					   COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
					   AVG(co.commandes_montant) AS Mmc 
						FROM customers cu
						INNER JOIN commandes co  
						ON cu.customers_id=co.customers_id 
						WHERE co.commandes_status='1' 
						and  customers_from='".$row['Origin']."'
						GROUP BY Origin ";
							
							$result = mysql_query($query_produit) ;	
				
	while ($row1 = mysql_fetch_array($result)) 
	{	
					
?>
	 <tr>
			<td style="background-color:#CCCCCC;">  </td>
            <td style="text-align:center;"> <?php echo $row['Origin'] ?> </td>
			 <td style="text-align:center;"> <?php echo $row['effectif_vg'] ?> </td>
				 <td style="text-align:center;"> <?php echo $row1['command'] ?> </td>
			 <td style="text-align:center;"> <?php echo round($row1['command']*$row1['Mmc']) ?> euro </td>
             <td style="text-align:center;"> <?php echo round($row1['Mmc'] ,2) ?> </td>
                
	</tr>
<?php
} 	
	}

?>
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
8 mai 2009 à 11:05
Bonjour,

Peux-tu rajouter le code suivant après la première instruction mysql_query
$num_rows = mysql_num_rows($result_vg);
echo "$num_rows Rows\n";

et le code suivant après la deuxième
$num_rows1 = mysql_num_rows($result);
echo "$num_rows1 Rows\n";

Ceci devrait te donner le nombre de lignes de chaque requête et pourra peut-être nous aider à trouver le problème.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 14:39
Merci

donc après avoirs effectué les différentes modiffication et ajouté ce que tu ma dit de faire

<?php
	
	// REQUETE 1 : 
	$query = "SELECT substr(customers_from, 1, 3) AS Origin, 
       COUNT(*) AS effectif_vg
FROM customers 

GROUP BY Origin ";
	$result_vg = mysql_query($query) ;
		
	$num_rows = mysql_num_rows($result_vg);
echo "$num_rows Rows1\n";
 
while ($row = mysql_fetch_array($result_vg)) 
{  

 
	// REQUETE 2 : 		
			$query_produit = 
					" SELECT substr(customers_from, 1, 3) AS Origin,
					   COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
					   AVG(co.commandes_montant) AS Mmc 
						FROM customers cu
						INNER JOIN commandes co  
						ON cu.customers_id=co.customers_id 
						WHERE co.commandes_status='1' 
						and  customers_from='".$row['Origin']."'
						GROUP BY Origin ";
							
							$result = mysql_query($query_produit) ;	
							
				$num_rows1 = mysql_num_rows($result);
echo "$num_rows1 Rows2\n";

	while ($row1 = mysql_fetch_array($result)) 
	{	
					
?>
	 <tr>
			<td style="background-color:#CCCCCC;">  </td>
            <td style="text-align:center;"> <?php echo $row['Origin'] ?> </td>
			 <td style="text-align:center;"> <?php echo $row['effectif_vg'] ?> </td>
				 <td style="text-align:center;"> <?php echo $row1['command'] ?> </td>
			 <td style="text-align:center;"> <?php echo round($row1['command']*$row1['Mmc']) ?> euro </td>
             <td style="text-align:center;"> <?php echo round($row1['Mmc'] ,2) ?> </td>
                
	</tr>
<?php
} 	
	}

?>


j'ai obtenu le résultat suivant

12 Rows1 1 Rows2 1 Rows2 0 Rows2 0 Rows2 0 Rows2 1 Rows2 0 Rows2 0 Rows2 0 Rows2 0 Rows2 0 Rows2 0 Rows2
Pays 	Prestataire 	V G 	Commandes 	C.A 	Mmc
		________100832 	11532 	573017 euro 	49.69
	1st __________855 	11 	1459 euro 	132.64
	bly __________8 	23 	1879 euro 	81.68 




et normalement je dois avoir 7 lignes
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
8 mai 2009 à 15:22
Bonjour,

Ok, la première requête te trouve donc 12 lignes, ensuite la deuxième requête trouve une ligne pour la 1ère, 2ème et 6ème ligne, cela voudrait dire que pour les autres lignes, la deuxième requête ne trouve pas de données dans la table commandes soit parce il n'existe pas de lignes avec le même customer_id ou bien aucune ligne pour ce customer_id n'a de ligne où commande_status égale à 1 (c'est que ce tu peux voir dans les résultats de ton premier post).

Est-tu sur que tu devrais avoir au minimum 5 lignes ? (tu peux peut-être inclure dans ta réponse quelques lignes de ta table commande que tu penses devoir être retournées par ta deuxième requête).

A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 15:53
Merci

voilà ce que sa me sort sur easyphp quant j'execute ma deuxième requette

Origin 	effectif 	command 	Mmc
  	7525 	11317 	49.22652646
1st 	57 	71 	89.15422535
adc 	1 	1 	79.00000000
adw 	1950 	2927 	58.41648446
aff 	14349 	22406 	57.93342185
bly 	1 	22 	84.71363636
him 	120 	196 	58.32066327
StV 	76 	109 	62.64954128
xxx 	1 	2 	29.00000000

0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
8 mai 2009 à 16:34
Bonjour,

Peux-tu exécuter la requête suivante sur ta table commande et inclure le résultat dans ta réponse
SELECT substr(cu.customers_from, 1, 3) AS Origin,
cu.customers_id AS Client,
count(co.commandes_status) AS command,
AVG(co.commandes_montant) AS Mmc
FROM customers cu
INNER JOIN commandes co  
ON cu.customers_id=co.customers_id 
WHERE co.commandes_status = '1'
GROUP BY Origin , Client

Ceci devrait me permettre de vérifier que tu n'as pas différents customers_id pour les mêmes trois premiers caractères de customer_from.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 16:37
voilà les résultats que sa me donnes:

Origin 	Client 	command 	Mmc
__________6 	1 	29.00000000
  	62 	1 	79.00000000
  	71 	1 	49.00000000
  	72 	1 	79.00000000
  	81 	1 	79.00000000
  	87 	1 	19.95000000
  	94 	1 	19.95000000
  	102 	3 	32.96666667
  	123 	1 	49.00000000
  	128 	1 	14.95000000
  	131 	1 	49.00000000
  	140 	1 	19.00000000
  	142 	1 	9.00000000
  	146 	1 	39.00000000
  	156 	2 	24.47500000
  	159 	1 	19.95000000
  	173 	1 	49.00000000
  	174 	1 	79.00000000
  	185 	2 	229.00000000
adw 	217856 	2 	49.00000000
adw 	217934 	1 	14.95000000
adw 	218060 	1 	79.00000000
adw 	218358 	1 	79.00000000
adw 	218534 	1 	9.00000000
adw 	218934 	7 	35.52857143
adw 	219298 	2 	79.00000000
adw 	219368 	1 	79.00000000
adw 	219736 	1 	9.00000000
adw 	219806 	2 	11.97500000
adw 	219867 	1 	79.00000000

il y a plusieur page comme sa
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
8 mai 2009 à 16:51
Bonjour,
Je crois que j'ai trouvé, dans ta deuxième requête tu as le code suivant:
and  customers_from='".$row['Origin']."'

or dans ta première requête tu ne prends que les trois premiers caractères de customers_from, le code ne devrait-il pas être
and  substr(customers_from , 1 , 3) ='".$row['Origin']."'


A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
8 mai 2009 à 17:04
je suis sur que t'es une princesse toi

En tous cas mille merci
et un
Excellent week-hend
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384 > sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013
8 mai 2009 à 17:07
Bonjour,

Non, tu verras dans mon profil que je suis un homme (;-)) et puis t'aider était fait avec plaisir.
Passe également un excellent weekend et n'oublie pas d'indiquer que ton problème est résolu.
A plus
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
12 mai 2009 à 11:27
:( hello Christounet

désolé je m'étais réjouis un peu trop vite et excuse moi pour t'avoir dis princess j'ai mis deux s de trop a la fin.

voilà mon affichage est bon merci mais mon problème c'est que sa doit m'affiché sa:

Partenaire  	Nb de leads  	Nb de commandes  	Tx conv.  	CA  	MMC
n/a 	5271 	234 	4.44 	22676 € 	96.91
1st 	259 	12 	4.63 	1558 € 	129.83
adc 	82 	2 	2.44 	138 € 	69
adw 	2258 	122 	5.4 	11408 € 	93.51
aff 	6211 	288 	4.64 	25202 € 	87.51
cm_ 	2 	0 	0 	0 € 	0
StV 	11 	0 	0 	0 € 	0


et chez moi sa n'affiche que:
Pays  	 Prestataire  	 V G  	 Commandes  	 C.A  	 Mmc
		5271 	234 	22676 euro 	96.91
	1st 	259 	12 	1558 euro 	129.83
	adc 	82 	2 	138 euro 	69
	adw 	2258 	122 	11408 euro 	93.51
	aff 	6211 	288 	25202 euro 	87.51 


donc on peut constaté que quand on a pas de commande on affiche rien??
j'ai essayer je me suis acharné a modifier ma requete pour que sa marche mais rien a faire

et comme je sais que tu es un prince ;) tu pourrai me donner un coup de main
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
12 mai 2009 à 12:02
hello a croire qu'en t'envoyan ce message du ma donné des hondes positif qui ma fai solutionné mon problème j'ai finalement réussi.

mais a chaque solution ce pose un autre problème qui est que si je met aucune date il y a rien qui s'affiche
alors qu'ils pren aucune donné il devrai tou me mettre???

je comprend pas?

sinon ma requette je l'ai modifier comme celà:
$query_produit = 
					" SELECT 
					   COUNT(DISTINCT cu.customers_id) AS effectif, count(co.commandes_status) AS command,
					   AVG(co.commandes_montant) AS Mmc 
						FROM customers cu
						INNER JOIN commandes co  
						ON cu.customers_id=co.customers_id 
						WHERE " . $condition . " and co.commandes_status='1'
						and   customers_from LIKE '{$row['Origin']}%'
						 ";
0
sinifer Messages postés 312 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 12 mars 2013 11
12 mai 2009 à 13:58
c'est tous bon je te remerci pour tou bonne journée
0