基于多个复选框状态构建 SQL 查询

Posted

技术标签:

【中文标题】基于多个复选框状态构建 SQL 查询【英文标题】:Structuring SQL query based on multiple checkboxes state 【发布时间】:2011-03-06 07:01:29 【问题描述】:

我正在进行餐厅搜索,用户可以在其中根据许多条件过滤搜索...

我有三张桌子:

Table1 - **Restaurant**
------+----------+----------
  id  +   name   +   place
------+----------+----------
   1      Rest1       Ny
   2      Rest2       La
   3      Rest3       Ph


Table2 - **r_type**
------+----------+----------
  id  +   name   +   code
------+----------+----------
   1      type1       0
   2      type2       1
   3      type3       2
   4      type4       3


Table3 - **type_stack**
------+----------+----------
  id  + rest_id  +   type
------+----------+----------
   1      2          2
   2      4          1
   3      1          2

现在人们可能会搜索具有 type1 和 type2 或只有一种类型等的餐厅... 如何根据用户选择的复选框状态生成查询。 它是如何在php中完成的?大约有 7-12 个复选框。

另一个问题是实现这一点的最佳方法是什么?这种桌子好吗?因为用户可以选择更改他们的选项并刷新他们的

使用 ajax 的结果。所以服务器负载会更多。

谢谢

【问题讨论】:

【参考方案1】:

我不确定我的 sql 语法,但您可以将所有复选框作为参数,然后将查询放在您可以执行以下操作的位置:


from ...
where
(somecolumn = @check1 or @check1 is null)
and
(somecolumn2=@check2 or @check2 is null)

我认为这对您来说是一个很好的解决方案。

希望对你有帮助

【讨论】:

【参考方案2】:

将您的复选框命名为:

<input type="checkbox" name="chk[]" value="1" />
<input type="checkbox" name="chk[]" value="2" />

以此类推,其中的值是 Table1 中的 id。当用户点击提交按钮时,POST 将包含选中复选框的值。

在你的 PHP 中,你有

$chkArr = isset($_POST['chk']) ? $_POST['chk'] : array();
$chkArrCSV = implode(',',$chkArr);

然后您可以将查询构建为

$sql = 'SELECT blah FROM blah WHERE id IN '.mysql_real_escape_string($chkArrCSV);

以及清理用户输入所需的任何其他内容。

【讨论】:

谢谢你 :),这可能会有所帮助。目前我无权访问数据库。我会检查并很快回来。

以上是关于基于多个复选框状态构建 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Django 生成的多个复选框的状态?

多个具有相同名称的复选框。我怎么知道哪些是未选中的? [复制]

Vue JS 基于复选框数组过滤结果

多个复选框过滤反应状态

多个复选框状态已选中

ajax查询后设置复选框状态