Pb de boucle avec plusieurs tables

Signaler
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010
-
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009
-
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

Messages postés
166
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
8 avril 2007
1
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
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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
?>
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

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
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
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
?>
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

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
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

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
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

... et bien sure, juste une precision, si aucun $resultats['commande_id']=$transaction['commande']
alors il va m'afficher NON NON NON
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

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
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
167
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
24 mai 2010

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
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
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]
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

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