2011-09-02 2 views
1

J'ai deux tables: users, images. Les utilisateurs ont une colonne paid qui est un chiffre pour le nombre d'images qu'ils ont payé pour entrer dans le concours .. images a une colonne entered avec une valeur de 0 pour non entré, et 1 pour entré. J'ai besoin de la somme de ceux-ci pour chaque utilisateur. J'essaie d'interroger tous les utilisateurs qui ont payé pour plus d'images qu'ils n'en ont saisies. mais il ne fonctionne pas correctement .. Voici ce que des impressions:php mysql supérieur au numéro

[email protected]  8 2 
[email protected] 3 3 
[email protected]  7 3 
[email protected] 5 1 
[email protected]  2 3 

Vous pouvez voir que jcannon @ et ray @ ne doivent pas être dans la liste, car payé ne dépasse pas entré

est le code ici:

$SQL = mysql_query("SELECT *, SUM(images.entered) 
         FROM users, images 
         WHERE users.id=images.owner 
         AND users.paid>'SUM(images.entered)' 
         GROUP BY users.id "); 

while($sendto=mysql_fetch_array($SQL)){ 
    print $sendto['email']." ".$sendto['paid']. 
      " ".$sendto['SUM(images.entered)']. "<br>"; 
} 

Qu'est-ce que je fais mal?

+0

Est-ce que 'SUM (images.entered)' est vraiment cité? Cela en fait une chaîne. L'opérateur> le transformera en un nombre, 0, de sorte que tous ceux qui ont payé quelque chose correspondront. Retirez le '... – johannes

+0

je reçois 0 résultats lorsque je supprime les citations ... avec les citations, j'obtiens des résultats. il supprime également les utilisateurs qui ont payé 0 et entré 0 –

Répondre

6

D'abord se débarrasser des guillemets, ils sont pour les chaînes littérales. Deuxièmement, vous ne pouvez comparer les valeurs agrégées avec la clause HAVING:

… WHERE … GROUP BY … HAVING users.paid >= SUM(images.entered) … 

Aussi je trouve souvent beaucoup plus claire à utiliser explicitement la syntaxe de jointure, au lieu de WHERE:

SELECT *, SUM(images.entered) 
FROM users 
INNER JOIN images 
ON users.id = images.owner 
GROUP BY users.id 
HAVING users.paid > SUM(images.entered) 
+0

je reçois 0 résultats lorsque je supprime les citations ... avec les citations, j'obtiens des résultats. il supprime également les utilisateurs qui ont payé 0 et entré 0 –

+0

Johnny, essayez plus grand que-ou-égal ('> =') – knittl

+0

toujours aucun résultat qui est étrange, parce que si je sors 'AND users.paid> = SUM (images.entered) 'complètement. tous mes résultats s'impriment correctement montrant les valeurs 'paid' et' sum (entrée) ' –

1

Essayez Mysql Having

* Vous pouvez utiliser join, si les deux tables ont une identification de colonne

$SQL = mysql_query(" 
SELECT 
*, 
SUM(images.entered) as totalImage, 
FROM users 
INNER JOIN images on (users.id = images.owner) 
HAVING users.paid > totalImage 
GROUP BY users.id 

");