这是我的产品表
我想获得所有产品,其中 product_sizes in (Xl, M)
我正在尝试这段代码
SELECT `id`,`name`,`sell_price`,`product_sizes`,`product_colors`
FROM `view_product_listing`
WHERE `product_sizes` in ('XL', 'M')
返回给我 productId 15 和 16 但我想要 productId 4,14,15,16
最佳答案
您应该认真避免将大小存储为 CSV(逗号分隔)数据,请参阅下面的替代表格设计。作为解决方法,我们可以使用 FIND_IN_SET
:
SELECT id, name, sell_price, product_sizes, product_colors
FROM view_product_listing
WHERE FIND_IN_SET('M', product_sizes) > 0 OR FIND_IN_SET('XL', product_sizes) > 0;
但请注意,更好的数据库设计是为产品、尺码和颜色设置一个单独的表:(省略颜色)
products
id | name | sell_price |
4 | Women Maxi White Dress | 550.00 |
14 | Women Maxi Blue Dress | 700.00 |
15 | Women Fit and Flare Multicolor Dress | 750.00 |
16 | Floral Print Straight Kurta | 699.00 |
sizes
product_id | product_size
4 | XL
4 | M
14 | XL
14 | XXL
14 | L
14 | M
15 | XL
16 | M
现在我们可以使用直接连接来查找所有产品及其元数据,这些产品具有中号或 XL 号:
SELECT
p.id,
p.name,
p.sell_price,
s.product_size
FROM products p
INNER JOIN sizes s
ON p.id = s.product_id
WHERE
s.product_size IN ('M', 'XL');
关于php - 如何从 MySQL 表中正确获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55741316/