2013-06-04 65 views
2

我有2個表;配置文件&發票。 配置文件是我的所有人都擁有的主表。 然後其中一些人有發票(個人可以沒有,一個或多個發票)。發票表中有一個字段「profileid」,它將其鏈接到配置文件中的相關ID。 發票表中有一個名爲「已付款」的字段,其中顯示「已付」或「未付」。mysql查詢查找連接表中的重疊

希望這就是明確

現在我有一個搜索頁面,其中一個可以搜索所有的文件。 我有2個複選框,因此您可以過濾所有已付發票和所有未付發票的那些複選框。

它工作正常單獨但不在一起。也就是說,如果您爲付款發票勾選了複選框,它會爲您提供所有曾支付過發票的配置文件,並且如果您未付款剔號,則會爲所有人提供未付發票;但是如果你在兩個方框中打勾,它會給你0個結果,當它給你所有的人都沒有報酬和付費的發票。

這裏是我的數查詢:

$query = "SELECT COUNT(DISTINCT profiles.id) AS num FROM profiles 
LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
AND (invoices.paid='Paid' OR invoices.paid='Unpaid') 
WHERE 
(
IFNULL(invoices.paid, '') LIKE '$paid%' 
AND IFNULL(invoices.paid, '') LIKE '$unpaid%' 
); 

花在這個年齡並不能得到它的工作,任何的幫助深表感謝。 感謝

+0

只是好奇(也許我誤讀)...你爲什麼要問一個'COUNT'?它每次都給你多個結果嗎? – jerdiggity

回答

0
SELECT COUNT(DISTINCT profiles.id) AS num FROM profiles 
LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
AND (invoices.paid='Paid' OR invoices.paid='Unpaid') 
WHERE 
IFNULL(invoices.paid, '') LIKE '$paid%' 
OR IFNULL(invoices.paid, '') LIKE '$unpaid%' 

但是一個完全不同的事情是,你不應該使用插值變量(如上面$paid),我覺得很奇怪,你必須使用LIKE '[...]%'選擇正確的值。它看起來好像數據庫模式狀態不好。

+0

謝謝,但與OR它給了我完全相同的結果。你是什​​麼意思插值變量? – Lan

+0

當您執行不返回任何行的調用時,「$ paid」和「$ unpaid」的值是多少?換句話說,讓我們將其歸結爲一個純粹的SQL問題。 – mzedeler

+0

$ paid would ='Paid'and $ unpaid would ='Unpaid' – Lan

1

它檢查它是否支付AND同時未付。顯然它永遠不可能是兩個!

您將不得不使用OR或只是選中這兩個選項時跳過此檢查。

+0

嗯。我用OR試過了,它給了我完全相同的結果 – Lan

+0

您正在使用的查詢僅給出結果的計數,而不是正確的結果。也許有多個地方你應該檢查。 – Havenard