我有一张语言表:
用户:
Id languages
--------------------------
1 english,french,german
2 english,german
3 english,french
4 french
我有一个复选框下拉列表(如下)。 我想让用户能够在每个id在用户表中显示的语言中搜索某种语言的子字符串。
例如 - 如果复选框"法语"将标记然后它将在页面上给出id的结果1 3和4。
我想过使用"在套装中找到"功能但如何?
这是代码:
var expanded = false;
function showCheckboxes() {
var checkboxes = document.getElementById("checkboxes");
if (!expanded) {
checkboxes.style.display = "block";
expanded = true;
} else {
checkboxes.style.display = "none";
expanded = false;
}
}
</script>
<tr>
<td>Languages</td>
<td dir="rtl">
<form method="post" action="exxx.php">
<div class="multiselect" dir="rtl">
<div class="selectBox" onclick="showCheckboxes()" dir="rtl">
<select>
<option>choose:</option>
</select>
<div class="overSelect" dir="rtl"></div>
</div>
<div id="checkboxes">
<label for="one">
<input type="checkbox" id="one" name="languages[]"
value="english">english</label>
<label for="two">
<input type="checkbox" id="two" name="languages[]" value="french"
>french</label>
<label for="three">
<input type="checkbox" id="three" name="languages[]"
value="arabic">german</label>
</div>
</div>
<input type="submit" name="submit">
</form>
现在,这&#34;语言&#34;字段是我所拥有的一些搜索字段之一,因此我想提取此查询:
$query = "select * from where 1=1,..."
$query.=" AND
find_in_set(ITEM1 of checkboxes selected, languages) <> 0 OR
find_in_set(ITEM2 of of checkboxes selected ,languages) <> 0 OR ...
etc.
有什么建议吗?
即使我将表格规范化:我的问题主要是从下拉列表中获取值并按它们搜索。我不知道选择了多少项,所以我无法写
Select where languages = '$languages[0]' OR languages='languages[1]'
我会给我一个偏移量我只选择了一个。
答案 0 :(得分:1)
不是在用户表的一列中列出语言,而是创建另一个表来将用户链接到语言,如下所示:
user_languages:
user_id language
1 english
1 french
1 german
2 english
2 german
3 english
3 french
4 french
然后,您就可以使用the IN operator将行与您的复选框中的值列表进行匹配。
SELECT DISTINCT user_id FROM user_languages WHERE language IN('french','german')
这适用于所选的任意数量的复选框。有关如何使用PDO准备语句执行此操作的简要示例:
$placeholders = rtrim(str_repeat('?,', count($_POST['languages'])));
$sql = "SELECT DISTINCT user_id FROM user_languages WHERE language IN($placeholders)";
$statement = $pdo->prepare($sql);
$statement->execute($_POST['languages']);
$ids = $statement->fetchAll(PDO::FETCH_COLUMN);