2012-12-05 52 views
0

我有一個包含用戶付款詳細信息的表格,以及另一個包含用戶清單的表格。我想從付款明細中獲得所有用戶的餘額,但僅限於未被禁止的用戶(這是用戶表中的一列)。我該如何嵌套這個MySQL Select Query?

我對嵌套查詢有點新,所以我不知道如何做到這一點?

這裏是我到目前爲止已經試過......

mysql_query(" 
    SELECT SUM(balance) 
    FROM payment_details 
    WHERE (SELECT ban 
      FROM users 
      WHERE username=username 
     ) != '1' 
") 

注:用戶名是兩個表中的列。

上述查詢不起作用。

回顧:有兩個表:payment_details和users。我想爲所有未被禁止的用戶添加餘額列。

+0

是所有用戶的總數,還是您希望每個用戶的總數? –

+0

沒有被禁止的所有用戶的總數:) – hellohellosharp

回答

3

請勿在此處使用子查詢。相反,請使用JOIN

SELECT SUM(payment_details.balance) FROM payment_details 
JOIN users ON payment_details.username = users.username 
WHERE ban != '1' 
+0

這似乎應該工作,但它給我舊的「mysql_fetch_array()期望參數1是資源,布爾給定」錯誤。有什麼想法嗎? – hellohellosharp

+0

檢查['mysql_error'](http://php.net/manual/en/function.mysql-error.php) –

+0

切換到PDO真正快速,因爲我有錯誤處理設置。它說:「帶有消息'SQLSTATE [23000]的未捕獲的異常'PDOException':違反完整性約束:1052字段列中的列'餘額'在...中不明確' – hellohellosharp

0

查詢是:

SELECT SUM(balance) FROM payment_details JOIN users ON payment_details.username=users.username WHERE users.ban !='1' group by payment_details.username 

的方式,對用戶的ID工作會比在用戶名

1

同意好得多,一個連接可能是你想要的東西。

但是回答的具體問題,你可以嘗試像查詢:

SELECT SUM(payment_details.balance) 
    FROM payment_details 
    WHERE payment_details.username in (
     SELECT users.username 
      FROM users WHERE ban != '1' 
    ); 

注意,那不是問題清楚你是否想爲每個用戶的總和,或者總和全部用戶。上述查詢提供後者 - 不按用戶分組。

+0

這確實有效(添加禁止!='1'後)。爲什麼JOIN比這更好?是否有某種原因? – hellohellosharp

+1

@ user1019588:'JOIN'比子查詢更有效率。 –