2014-06-20 34 views
0

我在MySql中有3個左連接表。使用條件WHERE子句選擇表的字段

contratos,其中存儲客戶數據

funcionario,存儲僱員數據

cobranca,存儲每個客戶收費。

我想根據收費status生成報告。但每個客戶收費有很多status,我想檢索當前status

以下代碼返回cobrancas表中的最後更新。

SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick 
FROM cobrancas cob 
LEFT JOIN contratos con 
ON c.id = cob.contrato 
LEFT JOIN funcionarios f 
ON f.id = cob.cobrador 
WHERE 1=1 
ORDER BY cob.created DESC 
LIMIT 1 

但它返回沒有status過濾器。如果我放入一個WHERE子句,如cob.status = 'x',它將返回此status的最後一條記錄,但它可能不是當前的。那麼如何檢查cob.status是否是WHERE子句中的當前status來決定是否將它放入列表中?喜歡的東西:

WHERE IF(cob.status == the last status inserted AND cob.status == 'x')

你能明白我想幹什麼?謝謝。

+0

你如何決定其當前的狀態是什麼? – VMai

+0

我在第一個查詢中使用** ORDER BY DESC **和** LIMIT 1 **。但我不知道如何在Where子句中做到這一點。我有一個**創建的**字段,存儲日期和小時。 – cbaracat

+0

那麼你的問題在哪裏,如果它有效? – VMai

回答

0

一種解決方案使用子查詢

select * from 
(
SELECT cob.status, cob.created, con.data_venda, cpn.contrato, con.razao_social, con.cnpj, con.valor, f.nick 
FROM cobrancas cob 
LEFT JOIN contratos con 
ON c.id = cob.contrato 
LEFT JOIN funcionarios f 
ON f.id = cob.cobrador 
WHERE 1=1 
ORDER BY cob.created DESC 
LIMIT 1 
) where status = 'X' 
+0

並將其他2個表加入外部查詢,則會更快 –