[英]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.