你好我喜欢为我的搜索引擎编写一个过滤器。我对不同的选择查询有一些问题。所以主要想法是我有一些带有复选框的输入字段,例如:
输入字段 a:[ _ ] 过滤器开/关:[ ]
输入字段 b:[ _ ] 过滤器开/关:[]
输入字段 c:[ _ ] 过滤器开/关:[]
为了设置查询,我为每个字段命名了查询:
if ($filter_a == true) {
$filter_1 =" `a` LIKE '%$input_a%' ";
}
if ($filter_b == true) {
$filter_2 =" `b` LIKE '%$input_b%' ";
}
if ($filter_c == true) {
$filter_3 =" `c` LIKE '%$input_c%' ";
}
因此,在启用过滤器的情况下,选择查询应该以特定方式更改,例如:
在启用 filter_a 的情况下:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a";
在启用 filter_a AND filter_b 的情况下:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a AND filter_b";
如果启用 filter_a AND filter_b AND filter_c:
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a AND filter_b AND filter_c";
我在向查询中添加“AND”时遇到问题。因此我集成了一个计数器来计算设置了多少过滤器:
$counter = 0;
...
if(!empty($_POST['input_a']) && (!empty($_POST['checkbox_filter_1'])) ){
$filter++;
}
...
if ($counter == 2) {
$and1 = " AND ";
$query = "SELECT `a`, `b`, `c` FROM `table` WHERE $filter_a $and1 filter_b";
}
所以主要问题是排列。到目前为止,我有 5 个过滤器,这意味着有 125 种可能性可供比较。
所以我的下一个想法是为每个查询创建一个数组并对其进行排序。
所以它应该看起来像:
$ordered_query = (
1-> `a` LIKE '%$input_a%',
2-> `b` LIKE '%$input_b%',
3-> `c` LIKE '%$input_c%');
这样我就可以将所有查询放在一个数组中。下一步应该是针对已设置或未设置的过滤器对它们进行排序。
因此,在启用 filter_3 和 filter_1 的情况下,它应该对数组键进行排序:
$ordered_query = ( 1-> input_a 2-> input_c );
并且查询应该在它们之间自动添加 AND。如果所有启用的过滤器之间必须有 2 个 AND。
如果有人可以帮助我,我真的很感激。
多谢。