一个数据表查询问题

发布于 2022-09-12 02:01:03 字数 581 浏览 10 评论 0

产品表

image.png

产品属性表
image.png

前端查询页面图
image.png

这时候 突然不知道前端 点击某些筛选之后 sql语句该怎么写了~~ 表结构貌似有点问题?

如上面查询图 现在要查 所有产品 颜色 = 金色 成色 = A+

select * from product_attr where `key` = 'color' and `value` = '金色' // 这样是ok的 那再加上 成色呢?
select * from product_attr where `key` = 'colour' and `value` = 'A+' 

怎么把上面那两条sql语句 合起来呢? 查询 成色 = A+ 且 颜色 = 金色的产品 突然脑子有点转不过来了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

海夕 2022-09-19 02:01:03

你的表设计有问题,应该直接把颜色、成色这些作为产品表的字段,属性表直接拿掉不要了。

江挽川 2022-09-19 02:01:03

这种情况下需要用交集,取出两部分重合的数据

何必那么矫情 2022-09-19 02:01:03

这个sql 应该可以满足你的需求,但是在真正的产品中,是不会出现这种的sql的
你这个表设计得有问题,你可以去了解一下商品的sku的设计


SELECT product.* from product LEFT JOIN(
SELECT t1.product_id FROM ( SELECT * FROM product_attr WHERE key = 'color' AND `value` = '金色' ) t1
JOIN ( SELECT * FROM product_attr WHERE `key` = 'colour' AND `value` = 'A+' ) t2 ON t1.product_id = t2.product_id
) temp  on product.id = temp.product_id

水溶 2022-09-19 02:01:03

最后的解决方案

select * from  `product`  where  exists (select  `product_id`  from  `product_attr`  where  `product`.`id` = `product_attr`.`product_id`  and  `key` in ('storage', 'color') and  `value` in ('128G', '白色') group  by  `product_id`  having  count(id) >= 2)

核心是在 group by porduct_id having count(id) >= 2这里 如果查询条件是3个那么 count(id) >=3 依次类推
暂未发现什么坑 能完成需求

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文