使用过滤器选项按尺寸获取产品。这是产品数据库结构:id | size------------ 1 | S,M 2 | S,M,L 3 | S 4 | M,L这是 Shirtsize 数据库结构:id | size------------ 1 | S 2 | M 3 | L这是过滤器的输入值获取代码<div class="list-group"> <h3>Size</h3> <?php $query = "SELECT DISTINCT(shirtsize) FROM shirtsize ORDER BY id DESC"; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); foreach($result as $row) { ?> <div class="list-group-item checkbox"> <label> <input type="checkbox" class="common_selector size" value="<?php echo $row['shirtsize']; ?>"> <?php echo $row['shirtsize']; ?> </label> </div> <?php } ?> </div>此代码从数据库中获取值:if(isset($_POST["size"])){ $size_filter = implode("','", $_POST["size"]); if (is_array($size_filter)) { foreach ($size_filter as $value) { $query .= "AND size like('%".$value."%')"; } } else{ $query .= "AND size like('%".$size_filter."%')"; }}在这里我有像 s,m,l 这样的数据库,并且发布数据也像这样.
3 回答

陪伴而非守候
TA贡献1757条经验 获得超8个赞
直接从 MySQL 处理您当前的数据模型可能需要一些 SQL olympics。相反,我将提供一个更好的规范化数据结构:
id | size ------------ 1 | S 1 | M 2 | S 2 | M 2 | L 3 | S 4 | M 4 | L
现在,如果您想获得不同的尺寸,您只需要:
SELECT DISTINCT(size) FROM shirtsize;
如果您想获得每个尺寸的计数id
,只需使用:
SELECT id, COUNT(*) AS cnt FROM shirtsize GROUP BY id;
通常,切勿将 CSV 数据存储在 SQL 表中。

千万里不及你
TA贡献1784条经验 获得超9个赞
首先,我加倍@Tim Biegeleisen 建议您规范化您的数据。
但是,您可以通过使用 FIND_IN_SET() 函数而不是 LIKE 来实现结果。
SELECT * FROM `shirtsize` WHERE FIND_IN_SET('S', `size`)
该函数返回字符串在字符串列表中从 1 开始的位置。如果未找到字符串,则为 NULL。
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

慕莱坞森
TA贡献1810条经验 获得超4个赞
谢谢各位 我有答案了
SELECT * FROM products WHERE status = '1' AND size like('%L%') OR size like('%M%')
或者
SELECT size from `products` WHERE size rlike "L|M"
- 3 回答
- 0 关注
- 75 浏览
添加回答
举报
0/150
提交
取消