php / mysql搜索表,过滤器数量未知

奥兹

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

例如,如果您前往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'
        );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用PHP和MySQL创建搜索“过滤器”

来自分类Dev

为mysql,php表创建过滤器

来自分类Dev

PHP Codeigniter 高级搜索过滤器

来自分类Dev

Phalcon PhP-未知过滤器

来自分类Dev

Phalcon PhP-未知过滤器

来自分类Dev

PHP MYSQL HTML搜索带有多个过滤器/字段

来自分类Dev

如何使用mysql向Ajax PHP搜索添加额外的过滤器选项

来自分类Dev

实现PHP搜索过滤器表单的设计模式

来自分类Dev

如何为php中的搜索创建过滤器

来自分类Dev

php中多维数组中的搜索过滤器

来自分类Dev

如何在php中实现多个搜索过滤器

来自分类Dev

PHP MySQL变量过滤器-“ AND”的行为类似于“ OR”

来自分类Dev

PHP搜索CSV文件。搜索过滤器的最小字符

来自分类Dev

搜索过滤器在Elastic Search PHP中不起作用

来自分类Dev

带有复选框PHP的实时搜索过滤器

来自分类Dev

角度搜索过滤器不起作用(PHP返回的数据)

来自分类Dev

复选框不起作用(尝试创建搜索过滤器)PHP

来自分类Dev

带有多个搜索过滤器的Cake PHP3分页

来自分类Dev

如何在弹性搜索 + PHP 中传递空过滤器

来自分类Dev

PHP 搜索过滤器按字母顺序对结果进行排序

来自分类Dev

MySQL查询来自多个表的搜索过滤器

来自分类Dev

MySQL查询来自多个表的搜索过滤器

来自分类Dev

ldap活动目录PHP过滤器

来自分类Dev

PHP - 什么是过滤器_id()用于?

来自分类Dev

使用PHP的白色过滤器JSON

来自分类Dev

LDAP PHP过滤器范围?

来自分类Dev

php坏词内容过滤器

来自分类Dev

SQL 和 PHP 过滤器

来自分类Dev

Laravel - 针对数据库中的日期范围的 PHP/MySQL 日期范围过滤器