Une while qui ne boucle pas
Fermé
MoYoX
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
-
24 juin 2009 à 10:01
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 - 24 juin 2009 à 13:09
MoYoX Messages postés 127 Date d'inscription jeudi 4 juin 2009 Statut Membre Dernière intervention 21 mars 2014 - 24 juin 2009 à 13:09
5 réponses
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
24 juin 2009 à 10:14
24 juin 2009 à 10:14
$query1="SELECT * FROM table_A WHERE 1";
WHERE 1 n'est pas une condition il faut WHERE un_champ=1 par exemple
WHERE 1 n'est pas une condition il faut WHERE un_champ=1 par exemple
MoYoX
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
3
24 juin 2009 à 10:21
24 juin 2009 à 10:21
Bonjour,
Merci pour la réponse, néanmoins, je ne veux pas de condition, je veux sélectionner toute la table et rien de plus pour effectuer mon traitement.
J'ai toujours effectué un "WHERE 1" pour mes requètes lorsque je désire prendre une table complète.
Merci pour la réponse, néanmoins, je ne veux pas de condition, je veux sélectionner toute la table et rien de plus pour effectuer mon traitement.
J'ai toujours effectué un "WHERE 1" pour mes requètes lorsque je désire prendre une table complète.
Bonjour,
Je pense avoir une piste pour toi :
Le second while qui boucle sur $tableau2 ne peut parcourir $result2 qu'une seule fois. En fait, $result2 contient les enregistrements extraits de la base de données et un curseurs qui permet de les balayer.
Lorsque tu appelles mysql_fetch_array, tu récupères l'enregistrement et tu incrémentes le curseur vers l'enregistrement suivant, et ce jusqu'a ce qu'il n'y ai plus d'enregistrement.
De ce fait, lorsque tu fais ton second passage avec ton while qui boucle sur $tableau1, tu ne rentre plus dans le while qui boucle sur $tableau2 car ce dernier et déjà en fin de course.
Pour remédier au problème, il faut :
1. Soit tu refais une requête pour récupérer resultat2
2. Soit (beaucoup mieux), tu utilises http://fr3.php.net/manual/fr/function.mysql-data-seek.php mysql_data_seek pour remettre ton curseur en première position de tous les enregistrements de résultats 2.
Je pense avoir une piste pour toi :
Le second while qui boucle sur $tableau2 ne peut parcourir $result2 qu'une seule fois. En fait, $result2 contient les enregistrements extraits de la base de données et un curseurs qui permet de les balayer.
Lorsque tu appelles mysql_fetch_array, tu récupères l'enregistrement et tu incrémentes le curseur vers l'enregistrement suivant, et ce jusqu'a ce qu'il n'y ai plus d'enregistrement.
De ce fait, lorsque tu fais ton second passage avec ton while qui boucle sur $tableau1, tu ne rentre plus dans le while qui boucle sur $tableau2 car ce dernier et déjà en fin de course.
Pour remédier au problème, il faut :
1. Soit tu refais une requête pour récupérer resultat2
2. Soit (beaucoup mieux), tu utilises http://fr3.php.net/manual/fr/function.mysql-data-seek.php mysql_data_seek pour remettre ton curseur en première position de tous les enregistrements de résultats 2.
MoYoX
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
3
24 juin 2009 à 10:54
24 juin 2009 à 10:54
Bonjour,
Merci pour cette réponse extrèmement claire !
Malheureusement je n'arrive pas à mettre en oeuvre de mysql_date_seek()
J'ai entré ce code:
En ajoutant le mysql_data_seek().
Avec ceci, la page php me copie la première ligne de mon table_A dans ma table_C plus de 36.000 fois et est coupée par le délai d'exécution de 30sec qui est dépassé (elle aurait pu monter bien plus haut donc).
Ai-je mal interprété cette fonction ?
Merci pour cette réponse extrèmement claire !
Malheureusement je n'arrive pas à mettre en oeuvre de mysql_date_seek()
J'ai entré ce code:
<?php $link=mysql_connect("localhost","root",""); mysql_select_db("base"); $query1="SELECT * FROM table_A WHERE 1"; $result1=mysql_query($query1,$link) or die (" Impossible de créer la requête 1 "); $query2="SELECT * FROM table_B WHERE 1"; $result2=mysql_query($query2,$link) or die (" Impossible de créer la requête 2 "); while($tableau1=mysql_fetch_array($result1)) { while($tableau2=mysql_fetch_array($result2)) { if($tableau2[champ1] == $tableau1[champ1]) { $query="INSERT INTO table_C (champ1, champ2) VALUES ( '".$tableau1[champ1]."', '".$tableau1[champ2]."'); mysql_query($query,$link) or die (" Impossible de créer la requête 2 "); mysql_data_seek($result2,0); } } } ?>
En ajoutant le mysql_data_seek().
Avec ceci, la page php me copie la première ligne de mon table_A dans ma table_C plus de 36.000 fois et est coupée par le délai d'exécution de 30sec qui est dépassé (elle aurait pu monter bien plus haut donc).
Ai-je mal interprété cette fonction ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
MoYoX
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
3
24 juin 2009 à 13:09
24 juin 2009 à 13:09
Merci beaucoup ça fonctionne parfaitement comme je le voulais !
Même si ce que j'ai compris du mysql_data_seek reste très vague, ça marche, et c'est très bien !
Merci beaucoup encore !
Même si ce que j'ai compris du mysql_data_seek reste très vague, ça marche, et c'est très bien !
Merci beaucoup encore !