Page 1 sur 1

requete qui retourne rien

Posté : 24 déc. 2011, 13:37
par xzena
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 ?

Re: requete qui retourne rien

Posté : 24 déc. 2011, 13:47
par xTG
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 ;
}

Re: requete qui retourne rien

Posté : 24 déc. 2011, 14:47
par xzena
j'ai pas compris quoi faire alors

Re: requete qui retourne rien

Posté : 24 déc. 2011, 15:27
par Ryle
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 :)

Re: requete qui retourne rien

Posté : 27 déc. 2011, 20:41
par liens_geeks
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

Re: requete qui retourne rien

Posté : 28 déc. 2011, 17:07
par xzena
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 ;)