Forum Clubic

[PHP] pb de boucle avec plusieurs tables

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 de vrait m’afficher
enr 1 NON
enr 2 OUI
enr 3 NON
enr 4 OUI

<?
// 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
?>

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

Dans ton if, il te faut deux ‘=’, ce qui donnerait :[cpp]if ($resultats[‘commande_id’] == $transaction[‘commande’])[/cpp](Je ne sais pas c’est une erreur de recopie de ton code)

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.

ca ne risque pas de fonctionner, problème d’algo :), comment veux tu tomber sur un id de commande de la table transactions identique à celui que tu parcours dans la table commandes ? les deux tables sont indépendantes

une solution possible :
ce qu’il te faut faire, c’est récupérer l’intégralité des id de commande de la table transaction dans un tableau

Dans la boucle, tu parcours chaque commande_id de la table Commandes(ta boucle actuelle)
Tu vérifie si le commande_id en cours est dans le tableau des n° de commandes de la table Transactions(c’est là que tu met oui/non
aide toi de in_array() :smiley:

qqch de ce style :
[cpp]

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

j’obtiens l’erreur suivante :
Warning: in_array(): Wrong datatype for second argument

merci de ton aide

erreur de ma part, j’avais un $transaction a trainer
par contre je n’arrive pas a creer mon tableau avec la boucle


$transaction = array(); 
while($res = mysql_fetch_array($req_transactions)) $transaction[] = $res; 

merci

étrange
vérifie ta requete de selection pour la transaction
et fait aussi un print_r($transaction) pour voir si ton tableau est vide ou non

C bon j’ai trouvé !
$transaction[] = $res[‘commande’];