【问题标题】:Structuring SQL query based on multiple checkboxes state基于多个复选框状态构建 SQL 查询
【发布时间】: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 的结果。所以服务器负载会更多。

谢谢

【问题讨论】:

    标签: php mysql checkbox filtering


    【解决方案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);
      

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

      【讨论】:

      • 谢谢你 :),这可能会有所帮助。目前我无权访问数据库。我会检查并很快回来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多