2010-09-22 6 views
1

Le résultat est toujours 1:mysql_num_rows retourne toujours 1

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$vote_total = mysql_num_rows($res); 

J'ai couru la requête $ sql dans phpMyAdmin et il retourne 3, de sorte que la requête n'est pas le problème. $ vote_total est initialisé globalement à 0, de sorte que 1 vient de quelque part. Quelles autres informations dois-je fournir pour faciliter mon travail?

Merci, Ryan

Répondre

9

mysql_num_rows retourne le nombre de lignes sélectionnées et non les champs d'une certaine ligne. Utilisez mysql_fetch_row pour aller chercher la ligne que vous avez sélectionné votre requête:

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$row = mysql_fetch_row($res); 
$vote_total = $row[0]; 

Vous pouvez également utiliser mysql_result pour extraire une ligne et obtenir un certain champ:

$vote_total = mysql_result($res, 0, 0); 

Ce va chercher la première ligne (base zéro) et renvoie le premier champ (basé sur zéro).

+0

Dans ce cas, tout ce que je dois faire est de déterminer combien de lignes il y a dans le tableau. Donc, pour cela, je peux utiliser mysql_num_rows. Mais la colonne "Vote" contient l'une des trois valeurs: A, B, ou C. Si je veux maintenant compter combien de fois A, B ou C apparaît, j'utiliserais aussi num_rows, non? Récupérer la ligne est seulement quand j'ai besoin des données, correct? Merci, Ryan. – NightHawk

+0

En fait, je suppose que non, car mysql_num_rows ne fonctionnait pas. Êtes-vous en train de dire que la valeur qui représente la quantité de lignes est stockée dans un champ et c'est pourquoi j'ai besoin d'obtenir ce champ avec mysql_fetch_row ou _array? – NightHawk

+0

@Ryan S .: Vous auriez besoin d'utiliser une requête différente: 'SELECT Vote, COUNT (Vote) FROM table GROUP BY Vote'. Cela retournera trois lignes (une pour chaque valeur * Vote *) avec deux champs (* Vote * et le nombre de lignes avec cette valeur). – Gumbo

2

Il n'y aura plus qu'une ligne. Et dans cette rangée sera le nombre de votes.

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$vote_array = mysql_fetch_array($res); 
$vote_total = $vote_array[0]; 

Si vous voulez compter le nombre de votes avec mysql_num_rows, vous devez sélectionner toutes les lignes.

+0

Pour sélectionner toutes les lignes, cela est fait dans la clause WHERE? – NightHawk

1

La partie délicate est que même lorsque la requête sql contient une instruction COUNT(), il s'agit toujours d'un résultat de requête comme les autres. MySQL retournera une ligne contenant une seule colonne avec le nombre de lignes qui auraient été retournées, si vous avez émis une requête de reglar. En revanche, mysql_num_rows() ne compte que le nombre de lignes dans le résultat de la requête qui a été réellement exécutée. Dans ce cas, il s'agit toujours d'une seule ligne.

Qu'est-ce que vous voulez est:

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$data = mysql_fetch_row($res); 
$vote_total = $data[0]; 
2

Cette requête ne renvoie qu'une seule ligne. Ce que vous voulez est de récupérer la valeur de la requête:

$row = mysql_fetch_array($res); 
$vote_total = $row[0];