基于多个复选框状态构建 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 查询的主要内容,如果未能解决你的问题,请参考以下文章