gpt4 book ai didi

具有未知数量过滤器的 php/mysql 搜索表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:24 26 4
gpt4 key购买 nike

我在许多购物网站上看到它们旁边都有搜索过滤器,您可以添加任意数量的过滤器,它会研究数据,仅显示与所有过滤器查询匹配的数据。

例如,如果您去 ebay 寻找一台计算机,您可以按计算机的各种规范进行过滤以缩小结果范围。

我遇到的问题是如何为一个包含很多用户可以搜索的字段的表执行此操作。

我有一个属性表,我想通过任意数量的参数进行搜索,例如租金、位置等

我可以为每个可能的选项创建搜索查询,例如searchByAddress($array)searchByAddressAndRent($array) 等,但这显然不可行。

另一种方法是我可以为每个字段创建单独的查询,然后为每个参数触发单独的搜索查询,即 searchByRent($array)searchByAddress($array) 并允许PHP 应用程序使用 array_intersect 计算所有结果数组中哪些字段是通用的.

但我想知道,必须有适当的技术才能实现这一点。这个问题有点啰嗦,我无法通过谷歌搜索找到任何教程。

所以我的问题是,使用各种搜索过滤器搜索数据库表的“正确”方法/技术是什么?

最佳答案

如果您创建一个表示属性表的类,您可以在该类中定义一个静态数组,详细说明每个字段名称和对应的数据类型。

在前端,每​​个搜索字段都应对应数据库中的列名,因此 $_REQUEST 数组键将匹配列名。

在此之后,遍历您的搜索数组,检查每个变量是否存在于您的类字段定义数组中,并将其添加到搜索查询中。

下面是一个非常简化的示例类,希望它能给您启发。

class Property () {

// search parameters come from $values_array
// each search field should correspond to the $field_definitions key
public function search($values_array = null) {

// populate the values array. Using this method meads you can pass an array directly
// into the search function, or you can rely on the $_REQUEST
$values_array = self::getValuesArray($values_array);

// setup the initial query
$query = "SELECT * FROM properties";
// set our initial join string
$join = "WHERE";

// loop each of our search values
foreach ($values_array as $field=>$value) {
// check the search key exists in our table definition and it's not empty
if (array_key_exists($field_definitions, self::$fields) && !empty($value)) {
// switch the datatype for the field so we can set the appropriate query string
switch (self::$field_definitions[$field]) {

case 'int':
$query .= "$join $field = {$value} ";
$join = "AND";
break;

default:
$query .= "$join $field = '%{$value}%' ";
$join = "AND";
break;
}
}
}

// now execute the query...
$results = mysql_query($query);

// do something to process the results and then return

return $results;
}

// basic function to grab our values from $_REQUEST if passed an empty array
private function getValuesArray($values_array = null) {

$values_array = (!empty($values_array)) ? $values_array : $_REQUEST;
return $values_array;
}

// variable containing all available fields in table and corresponding datatype
public static $field_definitions =
array( 'number'=>'int',
'street'=>'string',
'locality'=>'string',
'townland'=>'string',
'town'=>'string',
'postcode'=>'string'
);
}

关于具有未知数量过滤器的 php/mysql 搜索表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com