Pb de boucle avec plusieurs tables

cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010 - 24 janv. 2005 à 03:23
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009 - 24 janv. 2005 à 19:56
bonjour,
j'ai des probleme avec un requete intertable
je vous explique :
il faut absolument que $resultats['commande_id'] soit egal a $transaction['commande'] pour afficher "oui" mais le probleme C que $transaction ne boucle pas dans la table transaction donc
actuellement il affiche oui aux deux premiers enregistrements si j'ai deux enregistrements dans ma table transaction.
ex :
enr 1 OUI
enr 2 OUI
enr 3 NON
enr 4 NON


alors qu'il devrait m'afficher
enr 1 NON
enr 2 OUI
enr 3 NON
enr 4 OUI


<HR>
<?
// mes requetes
$req_commandes=mysql_query("SELECT * from commandes ORDER BY commande_id DESC");
$req_transactions=mysql_query("SELECT commande from transaction ");
// ma boucle
while($resultats=mysql_fetch_array($req_commandes)){
$transaction =mysql_fetch_array($req_transactions);
if ($resultats['commande_id']=$transaction['commande'])
// affichage
echo'OUI';
else echo'NON';
}
// fin de ma boucle
?>

<HR>

j'ai essayer d'inbriquer une boucle dans la boucle mais ca n'a pas marché, ... il affiche autant de fois de oui ou non que j'ai d'enregistrements dans la table transaction
comment dois-je m'y prendre
merci de votre aide

15 réponses

cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 1
24 janv. 2005 à 04:30
De la facon que tu explique la facon que ça marche je ne comprend pas
trop mais tu pourrais essayé de faire les deux requêtes dans la même
commande. Tu as également un erreur dans ton script: if($resultats['commande_id']=$transaction['commande'])

Tu dois utiliser le double égal sinon tu change le contenu de cette variable:

if($resultats['commande_id']==$transaction['commande'])


----------------

eXon
http://www.lookstrike.com
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 janv. 2005 à 05:48
Salut,

pourquoi tu ne fais pas qu'une seule requete?

// mes requetes
$req_commandes=mysql_query("SELECT commande, commande_id FROM transaction AS a, commandes AS b ORDER BY a.commande_id DESC");
// ma boucle
while($resultats=mysql_fetch_array($req_commandes)){
if ($resultats['a.commande_id']==$transaction['b.commande'])
// affichage
echo'OUI';
else echo'NON';
}
// fin de ma boucle
?>
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 12:19
en effet, j'avais oublier le = = mais ca ne marche pas mieux
si je fais dans ma boucle un echo''.$resultats['commande_id'].' et '.$transaction['commande'].'';
il m'affiche :
132 et 120
131 et 119
130 et
129 et ...

donc il n'affiche jamais 'oui' etant donner que la comparaison ne se fais que sur les 2 premiers enregistrements.

maldam : ton code n'a pas l'air de marcher (j'ai une erreur mysql_fetch_array au debut de la boucle)

merci de votre aide
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 janv. 2005 à 12:49
Hello,

oui, c'est ma faute, il etait tot ce matin...

// mes requetes
$req_commandes=mysql_query("SELECT a.commande, b.commande_id FROM transaction AS a, commandes AS b ORDER BY b.commande_id DESC");
// ma boucle
while($resultats=mysql_fetch_array($req_commandes)){
if ($resultats['a.commande_id']==$transaction['b.commande'])
// affichage
echo'OUI';
else echo'NON';
}
// fin de ma boucle
?>
0

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

Posez votre question
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 13:10
ca marche pas

il duplique dans ma liste, le nombre d'enregistrements de la table commande_id par le nombre d'enregistrements de la table transaction

merci de ton aide
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2005 à 13:52
salut

tu dis "jessaie d'imbrique une boucle dans ma boucle.."

moi je ne vois qu'un seul while, donc je ne vois qu'une seule boucle.

ne veux tu pas faure un while sur le 2ieme "fetch_array" ?

while($resultats=mysql_fetch_array($req_commandes))

{
while($transaction =mysql_fetch_array($req_transactions))

{

if ($resultats['commande_id']=$transaction['commande'])
// affichage
echo'OUI';
else echo'NON';

}
}



ceci dit, je comprends pas trop ce que tu veux faire.. mais avec une seule requete c'est jouable !


-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 14:10
oui ... mais le probleme si j'imbrique ma boucle, qu'il me duplique aussi par le nombre d'enregistrement de la table transaction

ex : si dans ma table transaction j'ai 3 enregistrements
trans1
trans2
trans3
alors il va m'afficher NON OUI NON si $resultats['commande_id']=$transaction['commande']de trans2

merci
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 14:16
... et bien sure, juste une precision, si aucun $resultats['commande_id']=$transaction['commande']
alors il va m'afficher NON NON NON
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2005 à 14:22
bon..j'ai 5 minutes là.
explique tranquillement ce que tu veux faire, avec des mots, que je puisse comprendre avant de te répondre.


-------------------------------------Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 14:32
alors ... je veux afficher une liste de commandes (jusque la pas de probleme) et dans cette liste il ya une collone qui reponds par oui ou par non si la transaction a bien ete effectué
donc dans ma table commandes j'ai
commande_id | client
101 | dupont
102 | durand ...
dans ma table transaction
id | commande
1 | 102
2 | 110
3 | 145
donc on doit verifier si commande_id de la table commande est dans la table transaction , si elle y est on affiche OUI sinon NON
dans l'exemple il devrait afficher
commande n° 101 dupont NON
commande n° 102 durand OUI

merci de ton aide
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2005 à 14:43
haaa voila un bel enoncé !

voici la solution la + simple:



<?

$req_commandes=mysql_query("SELECT commandeid from commandes ORDER BY commande_id DESC");

while($resultats=mysql_fetch_array($req_commandes))

{

$transacted=mysql_query("SELECT COUNT(*) from transaction where commandeid=".$resultats["commandeid"]);

$transatced=mysql_fetch_array($transacted);

if($transacted[0])

echo'OUI';

else

echo'NON';

}

?>





-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2005 à 14:43
haaa voila un bel enoncé !

voici la solution la + simple:



<?

$req_commandes=mysql_query("SELECT commandeid from commandes ORDER BY commande_id DESC");

while($resultats=mysql_fetch_array($req_commandes))

{

$transacted=mysql_query("SELECT COUNT(*) from transaction where commandeid=".$resultats["commandeid"]);

$transacted=mysql_fetch_array($transacted);

if($transacted[0])

echo'OUI';

else

echo'NON';

}

?>





-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_attentio Messages postés 167 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 24 mai 2010
24 janv. 2005 à 15:40
j'obtiens les erreurs suivantes :

<HR>
Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /home/commandes.php
a la ligne $transacted= mysql_query

Warning : mysql_query(): A link to the server could not be established in /home/commandes.php
a la ligne $transacted =mysql_query

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/commandes.php
a la ligne $trans=mysql_fetch_array($transacted);
<HR>

merci de ton aide
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
24 janv. 2005 à 16:31
là suis désolé mais je vois pas..
je fais juste une query...
tu as verifié que ton fichier /var/lib/mysql/mysq.sock etait bien présent ?
-------------------------------------Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
24 janv. 2005 à 19:56
Je ne suis pas très fort en PHP mais peut être que ca peut marcher



table commandes
commande_id | client
101 | dupont
102 | durand ...
dans ma table transaction
id | commande
1 | 102
2 | 110
3 | 145


Si tu rajouter un Numero_commande dans la table commandes et que tu compares

les champs id dans la table transaction avec le champs Numero_commande dans la table commandes ...



masi je ne connais pas le code PHP qui permet de faire ca ! peut être que vous le connaissez !


Sans maitrise la puissance n'est rien
0
Rejoignez-nous