mysql查询在连接表中查找重叠

时间:2013-06-04 19:34:41

标签: php mysql join

我有2张桌子;简介&发票。 个人资料是我的所有人都在其中的主要表格。 然后其中一些人有发票(个人可以没有,一个或多个发票)。发票表有一个字段'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%' 
);

花了很多年的时间,无法让它工作,任何帮助都非常感激。 感谢

2 个答案:

答案 0 :(得分:1)

检查其付费AND是否同时未支付。显然它永远不可能都是!

如果选择了两个选项,您将必须使用OR或跳过此检查。

答案 1 :(得分: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 '[...]%'来选择正确的值。看起来数据库模式状况不佳。