我有两张桌子:users, images.用户有一个列paid,它是他们支付多少图像进入比赛的数字.图像有entered一个值为0的列表,未输入,1表示输入.我需要每个用户的总和.
我试图查询付费的图像比他们输入的所有用户.但它没有正常工作..继承人打印什么:
bob@example.com 8 2
jcannon@example.com 3 3
jrcih@example.com 7 3
aerwqeerll@example.com 5 1
ray@example.com 2 3
Run Code Online (Sandbox Code Playgroud)
您可以看到jcannon @和ray @不应该在列表中,因为pay不大于输入
这是代码:
$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>";
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
首先除去引号,它们用于文字字符串.其次,您只能将聚合值与HAVING子句进行比较:
… WHERE … GROUP BY … HAVING users.paid >= SUM(images.entered) …
Run Code Online (Sandbox Code Playgroud)
另外我发现使用显式连接语法通常更清楚,而不是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)
Run Code Online (Sandbox Code Playgroud)