2011-09-02 48 views
1

我有两个表:users, images。用户有一列paid这是他们支付进入比赛的图像数量。 图像有一列entered,未输入值为0,输入值为1。我需要每个用户的总和。php mysql大于问题

我想查询所有支付更多图片的用户,而不是他们输入的图片。但它不能正常工作..继承人什么打印:

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

你可以看到,jcannon @和雷@不应该出现在列表中,因为付出比进入

这里没有更多的代码如下:

$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>"; 
} 

我在做什么错?

+0

'SUM(images.entered)'是否真的被引用?这使它成为一个字符串。 >操作符会将其转换为数字0,这样每个付费的人都会匹配。删除'... – johannes

+0

我得到0结果,当我删除报价...与报价,我得到的结果。它还会删除支付0并输入0的用户。 –

回答

6

首先摆脱引号,它们是用于文字字符串。其次,你只能用HAVING条款比较汇总值:

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

此外,我觉得它往往更加清晰使用显式联接语法,而不是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

当我删除引号时,我得到0个结果...,并得到结果。它也会删除支付0并输入0 –

+0

Johnny的用户,尝试大于或等于('> =') – knittl

+0

仍然没有结果,这很奇怪,因为如果我取出'AND users.paid> = SUM( images.entered)'完全。我的所有结果都能正确显示“已付费”和“总和(输入)”值 –

1

尝试Mysql Having

*您可以使用加入,如果两个表都有一些列标识

$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 

");