requete qui retourne rien

Eléphant du PHP | 187 Messages

24 déc. 2011, 13:37

salut,
je sais pas pourquoi cette requête me retourne rien alors que sur phpmyadmin il donne la résultat exacte!
$reqNVIS = mysql_query ("SELECT count(code) FROM table1 AS nbnvis1 WHERE code NOT IN (SELECT code FROM table2)");
while ($rowww= mysql_fetch_array($reqNVIS)){
$nbnvt1 = $rowww['nbnvis1'];
echo $nbnvt1 ;
}
idée svp ?

ViPHP
xTG
ViPHP | 7331 Messages

24 déc. 2011, 13:47

Tu tentes d'afficher un index qui n'existe pas, ce sont les noms des colonnes récupérées qu'il faut afficher.
$reqNVIS = mysql_query ("SELECT count(code) AS nb FROM table1 AS nbnvis1 WHERE code NOT IN (SELECT code FROM table2)");
while ($rowww= mysql_fetch_array($reqNVIS)){
$nbnvt1 = $rowww['nb'];
echo $nbnvt1 ;
}

Eléphant du PHP | 187 Messages

24 déc. 2011, 14:47

j'ai pas compris quoi faire alors

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

24 déc. 2011, 15:27

La fonction mysql_fetch_array() te retourne un tableau qui est à la fois associatif et indexé, c'est à dire que ta variable $rowww va être un tableau de la forme :
- $rowww["nom_de_la_colonne"] = valeur_en_base
- $rowww[position_dans_la_requête] = valeur_en_base

Pour récupérer le résultat de ton count(), il te faut donc soit :
- donner un alias comme le fait xTG : " COUNT(code) AS nb " puisqu'il n'y a pas de nom à la colonne count, on lui en donne un (ex : "nb"), et utiliser ensuite $rowww['nb'] pour récupérer la valeur
- utiliser la position de ce champ dans la requête (c'est le premier champ retourné par la requête, il a donc l'index 0) et utiliser ensuite $rowww[0] pour récupérer la valeur

La première solution reste préférable pour des questions de lisibilité et de maintenance (c'est plus facile de savoir ce que contient ta variable quand l'index s'appelle "nombreDeCodes" que quand il s'appelle "0". Et le jour où tu veux récupérer une deuxième donnée avec ta requête et que tu places celle-ci avant le count, tu n'as pas renuméroter tous tes index pour dire que les "0" sont désormais des "1"

A noter également que la fonction mysql_fetch_assoc() ne retourne que le premier cas (par nom de colonne) et que mysql_fetch_row() ne concerne elle que le second (par position). Ces fonctions sont un poil plus optimisée, puisqu'elles ne gèrent pas l'information qui ne te servira pas :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 49 Messages

27 déc. 2011, 20:41

Bonsoir,
Ne suffit il pas uniquement de déplacer le 'AS nbnvis1', sur la requête initiale postée par xzena?

SELECT count(code) FROM table1 AS nbnvis1 WHERE code NOT IN (SELECT code FROM table2)");
Par
SELECT count(code) AS nbnvis1 FROM table1 WHERE code NOT IN (SELECT code FROM table2)");

Ciao
Jérôme

Eléphant du PHP | 187 Messages

28 déc. 2011, 17:07

Bonsoir,
Ne suffit il pas uniquement de déplacer le 'AS nbnvis1', sur la requête initiale postée par xzena?

SELECT count(code) FROM table1 AS nbnvis1 WHERE code NOT IN (SELECT code FROM table2)");
Par
SELECT count(code) AS nbnvis1 FROM table1 WHERE code NOT IN (SELECT code FROM table2)");

Ciao
Jérôme
Justement AS..Merci.c'est résolu..
@Ryle Merci beaucoup pour l'explication ;)