2010-06-21 162 views
2

我正在一家餐厅搜索中,用户可以基于许多标准筛选搜索...构建SQL查询状态

我有三个表:

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 

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

另一个问题是什么才是实现这个最好的方法?这种桌子好吗?因为用户可以选择更改选项并使用ajax刷新其结果

结果。所以服务器负载会更大。

谢谢

回答

2

名称的复选框,这样的事情:

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

等,其中的值从表1的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); 

和其他任何你需要消毒用户输入。

+0

谢谢你:),这可能有帮助。目前我无法访问数据库。我会检查并尽快回复。 – esafwan 2010-06-21 17:49:43

1

我不知道我的安博SQL语法,但你可以把所有的复选框为PARAMS,然后将您的查询,在那里你可以这样做:


from ... 
where 
(somecolumn = @check1 or @check1 is null) 
and 
([email protected] or @check2 is null) 

我认为这将是一个很好的解决方案。

希望它可以帮助