使用用户选择的过滤器选项搜索MySQL数据库。数据库结构

时间:2013-09-03 16:44:36

标签: php mysql sql database forms

我有一个用户可以填写的表单,我希望在MySQL数据库中搜索用户选择的条目。例如,如果用户输入关键字,并检查选项2和3,我想在数据库中搜索关键字AND选项2和3。

但我不确定如何设置数据库。我是否需要在表中为每个选项添加一个额外的列,或者有没有办法在表中存储数组?我想到的另一种技术是为选项提供一个单独的表。

我以前见过这个,但我不确定正确执行。如果有人知道这样做的正确方法,那就太棒了。

编辑:这是一个地方数据库(比如音乐商店),选项是不同的乐器。现在,当用户填写表单时,我想返回一个商店列表,其名称中包含“关键字”字符串AND,用于销售用户选择的工具。

我不确定如何设置数据库以进行正确的查询。我应该将每个选项作为具有布尔值的单独列,还是可以使用具有布尔值数组的列?

注意:'仪器'只是众多选项中的一种。我还希望能够按其他标准进行过滤

HTML:

    <form>
         <input type="text" name ="Keyword" value="keyword"/><br/>
         Option 1<input type="checkbox" name="Option 1" value="option1"/><br/>
         Option 2<input type="checkbox" name="Option 2" value="option2"/><br/>
         Option 3<input type="checkbox" name="Option 3" value="option3"/><br/>
         Option 4<input type="checkbox" name="Option 4" value="option4"/><br/>
         <button type="submit">Submit</button>
    </form>

建议的数据库结构:

id  |  store_name  |  guitar  |  piano  |  saxophone  |  cello  |
 1     mike\'s music   true      false      false        true

OR:

id  |  store_name  |  instruments  |
1     mike\'s music    Array[2]

1 个答案:

答案 0 :(得分:0)

建议的数据库结构:

stores
id  |  store_name
 1     mike\'s music

instruments
id  |  desc
 1     guitar
 2     piano
 3     saxophone 
 4     cello

stocks
id  |  store_id  |  instrument_id
1      1            1                 
2      1            4

所以查询可以是这样的:

$query = "SELECT DISTINCT store_name
          FROM  stores 
          INNER JOIN stocks ON stores.id = store_id
          WHERE 1 = 1 ";
if ($keywords!="") {
          $query .= "AND store_name like concat('%','".$keywords."','%') ";
}
if ($option1!="") {
    $option[] = 1;
}
if ($option2!="") {
    $option[] = 2;
}
if ($option3!="") {
    $option[] = 3;
}
if ($option4!="") {
    $option[] = 4;
}
if (count($option)>0) {
    $query .= "AND instrument_id in (".implode(",", $option).")";
}