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

时间:2010-06-21 12:01:39

标签: php mysql checkbox filtering

我正在进行餐馆搜索,用户可以根据许多标准过滤搜索...

我有三张桌子:

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的结果。所以服务器负载会更多。

谢谢

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:1)

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


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

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

希望有所帮助