簡體   English   中英

mysql查詢在聯接表中查找重疊

[英]mysql query to find overlap in joined tables

我有2張桌子; 個人資料和發票。 profile是擁有我所有員工的主表。 那么其中一些人就會有發票(個人可以沒有發票,也可以沒有一張或多張發票)。 發票表格中有一個“ profileid”字段,可將其鏈接至個人資料中的相關ID。 發票表中有一個名為“已付款”的字段,其中顯示“已付款”或“未付款”。

希望那很清楚

現在我有一個搜索頁面,可以在其中搜索所有配置文件。 我有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%' 
);

花費了很多時間並且無法正常工作,非常感謝您的幫助。 謝謝

它同時檢查是否已付款AND未付款。 顯然永遠不可能兩者兼有!

如果同時選擇了兩個選項,則必須使用OR或跳過此檢查。

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 '[...]%'選擇正確的值,這很奇怪。 看起來數據庫架構的狀態不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM