【问题标题】:Fetch mysql with multiple values from single row [duplicate]从单行中获取具有多个值的mysql [重复]
【发布时间】:2020-11-05 05:54:28
【问题描述】:

我有一个带有phpjquery/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


【解决方案1】:

您是否需要与表中的 color_id 完全匹配,或者部分匹配也会返回行?

最好创建另一个表,其中颜色 ID 将保存链接主表。类似于下面的东西 main_table_id | color_id 11 1|2 1|3 2|2 2|3

等等

然后您可以使用 JOIN 来检索您的预期结果。

【讨论】:

  • 完全匹配,因为一种产品可以有多种颜色
【解决方案2】:

嗨(不要浪费时间在 jquery 上) 不是 ajax 而是清除 js fetch() 和 FormData 用于发送数据和文件

Sql 看这里: https://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

并且防止sql注入 https://doc.bccnsoft.com/docs/php-docs-7-en/pdostatement.execute.html

问候

向最优秀的人学习;)

https://www.youtube.com/channel/UC29ju8bIPH5as8OGnQzwJyA

你的桌子应该是这样的:

toys:
id|status|name
1|1|Toy1
2|1|Toy2

toy_colors:
id|rf_toy_id|color_id
1|1|1
2|1|3
3|2|5
4|2|1

select * from toy_colors left join toys ON toy_colors.rf_toy_id =    toy.id where toy.status = 1

并配3个表色表(未测试)

colors:
id|name
1|Red
3|Gold
5|Silver

select * from toy_colors left join toys ON toy_colors.rf_toy_id =    toy.id LEFT JOIN colors ON colors.id = toy_colors.color_id where toy.status = 1

:)

【讨论】:

  • 我会尝试这种方法,因为我已经有一个表格,我在保存产品时可以保留所有颜色。
  • 带色表的样本
  • 那里有什么问题,我测试了你的解决方案,当我像这样过滤时,我正在检索 2 个产品:'select * from toy_colors left join toys ON toy_colors.rf_toy_id = toy.id where toy.status = 1 GROUP BY toy_colors.id AND toy_colors.id IN(4)' 正在检索我 2 个产品 1 有 toy_colors id 4 和另一个没有 id 4...为什么给我 2 个产品,谢谢你的帮助。
猜你喜欢
  • 2018-08-01
  • 2019-03-06
  • 2018-07-05
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2014-12-26
  • 2015-03-21
  • 1970-01-01
相关资源
最近更新 更多