【发布时间】:2020-11-05 05:54:28
【问题描述】:
我有一个带有php 和jquery/ajax 的过滤功能,我的产品表看起来像这样:
|id|status|name|colors_id|
-------------------
| 1| 1 | toy| 1,4,7 | <-- this are id`s of few filters, red,blue,etc...
我的 sql 是这样的:
$query = "SELECT * FROM products WHERE status=1";
if(isset($_POST["color"])){
$color_filter = implode(",", $_POST["color"]);
$query .= "
AND color_id IN(".implode(",", $_POST["color"]).")";
}
当我过滤时,我在查询中添加了echo,结果是这样的
SELECT * FROM products WHERE status = 1 AND color_id IN(1,4,7)
基本上用户检查 3 种颜色,我想进入数据库并获取所有具有 1,4,7 的行并显示它们。
我的 html 看起来像这样:
<div class="sidebar-widget color-widgets">
<h6>FILTER BY COLOR </h6>
<ul>
<li>
<input type="checkbox" class="common_selector color" id="white" value="1">
<label for="white">white</label>
</li>
<li>
<input type="checkbox" class="common_selector color" id="red" value="7">
<label for="red">red</label>
</li>
<li>
<input type="checkbox" class="common_selector color" id="yellow" value="2">
<label for="yellow">yellow</label>
</li>
<li>
<input type="checkbox" class="common_selector color" id="blue" value="4">
<label for="blue">blue</label>
</li>
</ul>
</div>
如果检查 1,4 让我只有在这种情况下第一个是 1 并且没有找到 4。 (我知道安全是一个用mysql和php学习ajax的项目,下一步是PDO)
【问题讨论】:
-
现在您明白了为什么正确的数据库设计不包括带有逗号分隔键的列
-
你能给我一个替代的建议吗?谢谢,我希望有一个美好的一天。
-
您可以创建一个新表“colors”,将您的第一个表链接到每个coolors_id,其中每行有3 列:ID - IDfirstTable - idColor。在您的示例中,您将在这个新表中有 3 行,每个 colors_id (1,4,7) 有一个,例如: row1: 1 - 1 -1, row2: 2 -1 -4, row3: 3 - 1 -7
标签: php jquery mysql ajax filter