【问题标题】:Creating a dynamic search query with PHP and MySQL使用 PHP 和 MySQL 创建动态搜索查询
【发布时间】:2014-10-04 18:43:36
【问题描述】:

我正在尝试根据用户输入创建动态搜索查询。

要求:

  • 用户可以不填写、填写部分或全部字段。
  • 查询在表中搜索符合所有要求的记录。

现在我已经完成了研究,并且发现了多种方法。但是它们都不起作用,如果它们起作用,它们就远非实用。

尝试:

目前我正在创建这样的查询:

SELECT * 
FROM assignments 
WHERE (id = $id OR id = '') 
  AND (field1 = $field1 OR field1 = '')

此查询有效,但前提是您填写了所有字段。

我从一篇 stackoverflow 文章中得到了这个,但我再也找不到了,上面写着:

如果用户填写了输入字段,它将检查第一条规则 “id = $输入” 如果用户没有指定任何输入,它将检查“id = ''”以及何时 检查它,它只会返回所有内容。因为它逃避了空搜索规则。

但您可能已经知道,它不起作用..

你建议我如何处理这个问题?

【问题讨论】:

标签: php mysql sql search mysqli


【解决方案1】:

你应该从一个像你一样的字符串开始直到 WHERE 语句,然后循环遍历用户想要搜索的所有字段并将它们添加到一个数组中,然后使用 PHP 函数“implode”来粘合字段与 AND 语句一起作为“胶水”。

现在将粘合的字符串添加到 startquery 中,瞧!

我会举个例子,但在电话 atm 上!

【讨论】:

    【解决方案2】:

    根据响应动态构建查询绝对是必须的。但另一个允许用户根据部分响应查找结果的好功能是使用 MySQL REGEXP 查询。例如,如果他们想在 Top Gun 数据库中查找“maverick”,则查询 REGEXP = 'mav' | 'rick' 将返回结果。这使您的搜索更接近用户习惯的搜索引擎功能。

    Here's a REGEXP example, simplified.

    【讨论】:

      【解决方案3】:

      尝试获取所有帖子变量并遍历它们以查看它们是否有效,然后构建您的查询

      <?php
      $id = $_POST[id];
      $field1 = $_POST[field1];
      $field2 = $_POST[field2];
      $field3 = $_POST[field3];
      
      $whereArr = array();
      if($id != "") $whereArr[] = "id = {$id}";
      if($field1 != "") $whereArr[] = "field1 = {$field1}";
      if($field2 != "") $whereArr[] = "field2 = {$field2}";
      if($field3 != "") $whereArr[] = "field3 = {$field3}";
      
      $whereStr = implode(" AND ", $whereArr);
      
      $query = "Select * from assignments WHERE {$whereStr}";
      

      这样的东西应该可以满足您的需要

      【讨论】:

      • 谢谢。所有的答案都很有帮助,但你的成功了。
      猜你喜欢
      • 2013-03-25
      • 2017-01-22
      • 2014-07-17
      • 2019-01-02
      • 2011-09-26
      • 1970-01-01
      • 2012-11-12
      • 2011-11-05
      相关资源
      最近更新 更多