2

我有 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%' 
);

在这上面花了很长时间并且无法让它工作,非常感谢任何帮助。谢谢

4

2 回答 2

1

它检查是否AND同时支付未付款。显然,它永远不可能两者兼而有之!

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

于 2013-06-04T19:38:29.620 回答
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 '[...]%'来选择正确的值。看起来数据库模式的形状很糟糕。

于 2013-06-04T19:36:33.880 回答