我有一个用户可以填写的表格,我希望在MySQL数据库中搜索用户选择的条目。例如,如果用户输入一个关键字,并检查选项2和3,我想在数据库中搜索关键字AND选项2 AND 3。
我不确定如何设置数据库。我是否需要在表中为每个选项增加一列,或者是否可以在表中存储数组?我想到的另一种技术是为选项提供单独的表格。
我以前看过这件事,但是我不确定执行是否正确。如果有人知道执行此操作的正确方法,那就太好了。
编辑:这是一个地方数据库(例如,音乐商店),并且选件是出售的不同乐器。现在,当用户填写表格时,我想返回一个商店列表,这些商店的名称包括“关键字”字符串,并且出售用户选择的工具。
我不确定如何设置数据库以进行正确的查询。我应该将每个选项作为一个带有布尔值的单独列,还是可以将一个带有布尔值数组的列作为单独的列?
注意:“乐器”只是众多选择之一。我还希望能够通过其他条件进行过滤
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
要么:
id | store_name | instruments |
1 mike\'s music Array[2]
最佳答案
建议的数据库结构:
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).")";
}