Problème INSERT PHP/mysql

Petit nouveau ! | 5 Messages

02 mai 2011, 17:32

Bonjour,

J'ai construis 2 fonctions. L'une permettant de compter le nombre d'occurence d'un champ (num_nd dans la table 'bacara' et num_désignation dans la table 'gpc').

Voilà la code de la première fonction qui fonctionne :

Code : Tout sélectionner

function nb_occ_nd_gpc() { mysql_query("TRUNCATE TABLE bacara_occ_nd_gpc"); $req=mysql_query("SELECT num_nd FROM bacara"); $req2=mysql_query("SELECT num_designation FROM gpc"); $count=0; while($ligne=mysql_fetch_assoc($req)) { if($ligne['num_nd']!=0) { while($ligne2=mysql_fetch_assoc($req2)) { if($ligne['num_nd'] == $ligne2['num_designation']) { $count++; } } } mysql_query("INSERT INTO bacara_occ_nd_gpc (num_nd,nb_occ_nd_gpc) VALUES ({$ligne['num_nd']},$count)"); mysql_data_seek($req2,0); $count=0; } }
le num_nd et le nombre d'occurence sont stoqués dans une table préalablement crée : 'bacara_occ_nd_gpc'.

Dans les 3 différentes tables, le numéro qui est comparé est stocké dans un champs INT de taille 10.

Jusque là aucun problème


Ma deuxième fonction est pratiquement similaire, il y a seulement plus de champs mis en relation, et cette fois-ci les champs sont tous de type VARCHAR de taille 255.

J'ai fais des traces histoire de vérifier le contenu des variable, tout est ok mais la requête d'insertion ne s'éxecute pas, je suis débutant en php, peut être que quelqu'un pourrait m'éclairer!
Apercu du code de la deuxième fonction :

Code : Tout sélectionner

function nb_occ_ll_gpc() { mysql_query("TRUNCATE TABLE bacara_occ_ll_gpc"); $req=mysql_query("SELECT num_pres_comm_ft_re FROM bacara"); $req2=mysql_query("SELECT num_pres_comm_ft FROM bacara"); $req3=mysql_query("SELECT refint FROM gpc"); $count=0; while(($ligne=mysql_fetch_assoc($req)) && ($ligne2=mysql_fetch_assoc($req2))) { //echo"boucle bacara ---<br>"; if($ligne2['num_pres_comm_ft']!='') { //echo" 2eme colonne ----<br>"; while($ligne3=mysql_fetch_assoc($req3)) { if(substr_count($ligne3['refint'],$ligne2['num_pres_comm_ft']) >=1) { $count++; //echo $ligne3['refint'];echo"------";echo $ligne2['num_pres_comm_ft'];echo "<br>"; //echo $count;echo"<br>"; } } //echo $ligne2['num_pres_comm_ft'];echo"-------------------------------------";echo $count;echo"<br>"; mysql_query("INSERT INTO bacara_occ_ll_gpc(num_ll,nb_occ_ll_gpc) VALUES ({$ligne2['num_pres_comm_ft']},$count)"); // <=== requête non executée } elseif($ligne['num_pres_comm_ft_re']!='') { //[......]} mysql_data_seek($req3,0); $count=0; } }

Je pensais que la non execution de la requête venait d'une discordance au niveau des types de champs dans les différentes tables, mais tout est cohérent, si quelqu'un pouvait jeter un petit coup d'oeil car je bloque vraiment, merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2011, 21:07

Si ta fonction affiche bien les echo"-------------------------------------";echo $count;echo"<br>" quand tu enlèves les commentaires, c'est que ta requête est bien exécutée. Si tu n'as pas de résultat, le problème vient sans doute d'une erreur SQL lors de l'exécution... tu peux le vérifier en contrôlant le résultat du mysql_query() ou en ajoutant un "or die (mysql_error())" qui te permettra de savoir s'il n'y a pas une erreur dans la requête sql que tu génères...

Par ailleurs, tu devrais également regarder du côté des jointures et fonction de groupe en sql. A vue de nez ta première fonction pourraient être grandement simplifiée avec une requête du genre :
SELECT num_nd , COUNT(*) AS nombre FROM bacara, gpc 
  WHERE num_nd = num_designation 
    AND num_nd != 0
  GROUP BY num_nd 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

03 mai 2011, 11:36

Merci pour ta réponse, j'ai reglé le problème,

il y avait un problème avec la synthaxe INSERT INTO ... VALUES ({$ligne2['num_pres_comm_ft']},$count) car la variable était considérée comme un champ d'une table d'où la non execution de la requête.