Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只有当WHERE子句中的条件为false时,才需要HAVING子句中的约束_Php_Mysql - Fatal编程技术网

Php 只有当WHERE子句中的条件为false时,才需要HAVING子句中的约束

Php 只有当WHERE子句中的条件为false时,才需要HAVING子句中的约束,php,mysql,Php,Mysql,我有一个php应用程序,它允许人们通过添加过滤器来搜索数据。将根据其输入自动生成查询。 例如,他们可以为日期大于所需的添加一个过滤器。 然后,他们还可以添加几个过滤器,其中至少需要一个过滤器。 这很好,但是,问题是一些过滤器依赖于聚合函数,如SUM,需要将其放入HAVING子句中。这实际上破坏了搜索逻辑,因为我们无法再将该过滤器与由或分隔的其他过滤器进行匹配 在下面的示例中,他们希望找到所有使用这些过滤器的人: 日期大于2015年 及 (人员为约翰尼或产品为疫苗接种或总费用大于10) 由于其中一

我有一个php应用程序,它允许人们通过添加过滤器来搜索数据。将根据其输入自动生成查询。 例如,他们可以为
日期大于所需的
添加一个过滤器。
然后,他们还可以添加几个过滤器,其中至少需要一个过滤器。
这很好,但是,问题是一些过滤器依赖于聚合函数,如
SUM
,需要将其放入
HAVING
子句中。这实际上破坏了搜索逻辑,因为我们无法再将该过滤器与由
分隔的其他过滤器进行匹配

在下面的示例中,他们希望找到所有使用这些过滤器的人:

日期大于2015年 及 (人员为约翰尼或产品为疫苗接种或总费用大于10)

由于其中一个过滤器使用聚合函数,我们无法将其与其他过滤器进行匹配

我已经尝试将where条件作为列放入SELECT中,并在HAVING-IF列中执行IF。这是可行的,但不是最优的,并且在许多情况下会中断,因为必须自动生成此查询


有人对我应该如何处理这个问题提出了很好的建议吗?

Mysql允许将Have用作WHERE,所以将所有WHERE条件都移动到Have

HAVING
        expense.date > 2015
    AND (
        (person = 'Johnny' OR product = 'Vaccination')
   OR (total > 10) )

我需要选择所需的所有列,以便在have中使用它,这可能会对性能产生一些影响,但除此之外,我想这是可行的。干杯
HAVING
        expense.date > 2015
    AND (
        (person = 'Johnny' OR product = 'Vaccination')
   OR (total > 10) )