2010-10-23 5 views
0

Utilisation de PHP mysql_num_rows() renvoie "1" lors de l'exécution de la requête ci-dessous dans le tableau ci-dessous lorsqu'il n'y a pas de lignes correspondantes présentes. Après le test, j'ai découvert que le problème se produit lorsque j'utilise la fonction SUM() dans la requête. Si je prends SUM() hors de la requête mysql_num_rows() retourne "0" comme il se doit.mysql_num_rows() ne fonctionne pas avec SUM()?

Y at-il autre chose que je devrais utiliser à la place de mysql_num_rows() pour savoir s'il y a une ligne correspondante dans la table?

Tableau:

name | students_money | grade 
George | 5 | A 
Bill | 10 | A 
Dan | 7 | A 

code:

$sql = "SELECT SUM(students_money) AS sum_money FROM students_table WHERE name = 'Tom' AND name = 'Jack'"; 
$result = @mysql_query($sql, $con) or die(mysql_error()); 

$num_rows = mysql_num_rows($result); 

if ($num_rows < 1) { 

    echo "not everyone has paid"; 
    exit; 

} 

while($row = mysql_fetch_array($result)) { 

    $sum_money = $row[sum_money]; 
    $total = $total + $sum_money; 

} 

Répondre

3

Il y a toujours un retour d'une ligne dans votre cas car il y en a toujours une somme. La somme peut être 0 bien sûr.

Cela peut être une bonne idée de tester votre requête dans le navigateur de requêtes mysql. Peut-être que vous cherchez quelque chose comme ça?

SELECT name, SUM(students_money) AS sum_money 
FROM students_table 
GROUP BY name; 

Cela regroupera les sommes par nom. Pour sauter 0 sommes, vous pouvez ajouter ceci:

HAVING sum_money > 0; 
4

SUM() est une fonction d'agrégation. Il prend toutes les lignes qui sont retournées pour un groupe et les ajoute.

Comme vous n'avez pas de clause GROUP BY, il ajoute les valeurs de toutes les lignes, même s'il n'y en a pas. Il retourne ensuite le total en une seule ligne, il ne devrait donc y avoir qu'une seule ligne.

Si vous clarifiez ce que vous voulez renvoyer, je peux essayer de vous aider à écrire une déclaration pour le renvoyer. Mysql_num_rows() vous indique le nombre de lignes renvoyées par la requête de base de données.

+0

Je veux être en mesure de vérifier si Tom And Jack ne sont pas dans la table tout en utilisant la fonction SUM(). Est-ce possible? – Mark

+0

Si vous souhaitez renvoyer la somme pour les deux, vous ne pouvez pas le faire dans une seule requête. Si vous voulez connaître le total de chaque nom, vous pouvez utiliser la requête @nhnb écrite. Vous pouvez ensuite effectuer la somme en PHP. Sinon, vous devrez faire une requête pour voir si les deux ont payé, puis une deuxième requête pour obtenir la somme. –