【问题标题】:Checkbox filters on search results with strictly PHP?严格使用 PHP 对搜索结果进行复选框过滤?
【发布时间】:2021-08-20 10:01:25
【问题描述】:

我正在为我目前正在学习的课程创建一个基本的书评页面。我已经能够从我的数据库中完成简单的搜索:

$search_request = "SELECT * 
                   FROM books 
                   WHERE author
                   LIKE '%$searchfor%' COLLATE UTF8_GENERAL_CI 
                   OR title LIKE '%$searchfor%' COLLATE UTF8_GENERAL_CI";

这会产生完美的请求和回答。

但是,这只是为我提供了书籍清单。我想过滤搜索结果。

假设有人搜索“托尔金”,那么我想要两个复选框:作者和书籍,他们可以在其中过滤托尔金搜索以显示名为托尔金的作者或包括托尔金在内的书籍。

只要我有某种方式来接收指示作者和书籍的输入,我就可以编写 sql 查询来实现它。

我已经尝试通过锚点使用$_GET 和使用附加表单的$_POST,但是 GET 和 POST 使用初始搜索覆盖了我现有的 POST。有没有办法严格使用 PHP 或非常简单的 JS 来做到这一点?

【问题讨论】:

  • 为什么不以初始形式提供该过滤器,而不是等待他们搜索然后提供过滤器?
  • 这是我的后备计划。但是,我想让它可以在更广泛的数据库上工作并且更加动态。假设我也有“标签”和“流派”,有人搜索 King。我希望搜索被预选为书籍,显示其中包含 King 的书籍。但随后可以切换标签,显示带有 King 的标签,然后显示带有 King 的作者等。
  • 我仍然不明白为什么,为此,您不会简单地拥有一个包含多个字段的表单 - 搜索文本,然后是类别列表(例如“书籍”、“作者” , "tags", "genre") 作为复选框) 他们可以从中选择以应用搜索文本。让用户能够预先准确地选择他们想要的东西,这对用户来说更加友好。两步过程似乎 a) 减慢了用户的速度,并且 b) 导致服务器上不必要的负载(因为当他们只需要一个查询时,他们最终会运行两个查询)。
  • 是的,我想你是对的。我选择了该选项,在与搜索字段相同的表单内有两个单选按钮。感谢 cmets :)

标签: javascript php mysql search


【解决方案1】:

您可以使您的 sql 查询有条件。也就是说,仅在 某些条件 为真后附加 WHERE 子句。某些条件可能意味着向请求 url 添加查询参数。例如 get/request/route?filter="author"。如果 url 的查询参数filter 不为空,您可以检查该值是否匹配authortitle,然后附加相应的WHERE 子句。例如

 $sql .= 
  WHERE author
   LIKE '%$searchfor%' COLLATE UTF8_GENERAL_CI 

否则,如果没有任何过滤器,只需附加两个 WHERE 子句,这次使用 OR,就像您在上面所做的那样。

你可能会发现这个问题很有帮助How to build a MySQL query with conditional filters?

【讨论】:

  • 感谢您的评论!但是,我选择只在与搜索相同的表单中包含“过滤器”单选按钮,因为我发现这非常适合我的需求。
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 2013-03-09
  • 2011-06-17
  • 2013-02-02
  • 2021-02-13
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多