2011-09-02 41 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 

");