2011-03-14 39 views
0

我有一個SQL查詢問題和()

SELECT accounting.id, enclosure.time, enclosure.enc_id_, enclosure.txt, accounting.type_id, accounting.amount, accounting.invoice_id, invoice.invoice_id_, accounting.subaccountoff_id 
FROM $this->db.accounting accounting 
INNER JOIN $this->db.enclosure enclosure ON enclosure.id=accounting.enc_id 
LEFT JOIN $this->db.balance_accounting balance_accounting ON balance_accounting.accounting_id=accounting.id 
LEFT JOIN $this->db.invoice invoice ON invoice.id=accounting.invoice_id 
LEFT JOIN $this->db.book_enclosure book_enclosure ON book_enclosure.enc_id=enclosure.id 
WHERE accounting.group_id='".$_SESSION['gid']."' && (accounting.subaccount_id='$id' || accounting.subaccountoff_id='$id') && accounting.type_id <= 4 && book_enclosure.enc_id IS NULL 
ORDER BY enclosure.time DESC, enclosure.enc_id_ DESC 

當我在SELECT子句中添加SUM()查詢只返回一行?

這樣的..

SELECT accounting.id, enclosure.time, enclosure.enc_id_, enclosure.txt, accounting.type_id, accounting.amount, accounting.invoice_id, invoice.invoice_id_, accounting.subaccountoff_id, SUM(balance_accounting.amount) AS amount_off 
FROM $this->db.accounting accounting 
INNER JOIN $this->db.enclosure enclosure ON enclosure.id=accounting.enc_id 
LEFT JOIN $this->db.balance_accounting balance_accounting ON balance_accounting.accounting_id=accounting.id 
LEFT JOIN $this->db.invoice invoice ON invoice.id=accounting.invoice_id 
LEFT JOIN $this->db.book_enclosure book_enclosure ON book_enclosure.enc_id=enclosure.id 
WHERE accounting.group_id='".$_SESSION['gid']."' && (accounting.subaccount_id='$id' || accounting.subaccountoff_id='$id') && accounting.type_id <= 4 && book_enclosure.enc_id IS NULL 
ORDER BY enclosure.time DESC, enclosure.enc_id_ DESC 

我也試圖通過添加一組,但仍只返回一行

GROUP BY balance_accounting.accounting_id 

編輯:

現在我得到一個錯誤:列 'accounting_id' 不能爲空

SELECT accounting.id, enclosure.time, enclosure.enc_id_, enclosure.txt, accounting.type_id, accounting.amount, accounting.invoice_id, invoice.invoice_id_, accounting.subaccountoff_id, balance_accounting.amount_off 
FROM $this->db.accounting accounting 
INNER JOIN $this->db.enclosure enclosure ON enclosure.id=accounting.enc_id 
LEFT JOIN (
    SELECT accounting_id, SUM(amount) AS amount_off 
    FROM $this->db.balance_accounting 
) balance_accounting ON balance_accounting.accounting_id=accounting.id 
LEFT JOIN $this->db.invoice invoice ON invoice.id=accounting.invoice_id 
LEFT JOIN $this->db.book_enclosure book_enclosure ON book_enclosure.enc_id=enclosure.id 
WHERE accounting.group_id='".$_SESSION['gid']."' && (accounting.subaccount_id='$id' || accounting.subaccountoff_id='$id') && accounting.type_id <= 4 && book_enclosure.enc_id IS NULL 
ORDER BY enclosure.time DESC, enclosure.enc_id_ DESC 

回答

0
... 
LEFT JOIN (
    SELECT accounting_id, SUM(amount) AS amount_off 
    FROM $this->db.balance_accounting balance_accounting 
) ON balance_accounting.accounting_id=accounting.id 
... 
+0

我想過那個..但是不會像這些減慢請求一樣加入? – clarkk 2011-03-14 22:19:15

+0

是SUM()和其他聚合函數減速請求... – bensiu 2011-03-14 22:21:20

+0

你認爲將查詢拆分爲更多但更小的查詢會更好嗎? – clarkk 2011-03-14 22:32:38

0
SELECT accounting.id, enclosure.time, enclosure.enc_id_, enclosure.txt, accounting.type_id, accounting.amount, accounting.invoice_id, invoice.invoice_id_, accounting.subaccountoff_id, IFNULL(SUM(balance_accounting.amount), 0) AS amount_off 
      FROM $this->db.accounting accounting 
      INNER JOIN $this->db.enclosure enclosure ON enclosure.id=accounting.enc_id 
      LEFT JOIN $this->db.balance_accounting balance_accounting ON balance_accounting.accounting_id=accounting.id 
      LEFT JOIN $this->db.invoice invoice ON invoice.id=accounting.invoice_id 
      LEFT JOIN $this->db.book_enclosure book_enclosure ON book_enclosure.enc_id=enclosure.id 
      WHERE accounting.group_id='".$_SESSION['gid']."' && (accounting.subaccount_id='$id' || accounting.subaccountoff_id='$id') && accounting.type_id <= 4 && book_enclosure.enc_id IS NULL 
      GROUP BY accounting.id 
      ORDER BY enclosure.time DESC, enclosure.enc_id_ DESC