问答

一个数据表查询问题

作者:admin 2021-09-13 我要评论

产品表 产品属性表 前端查询页面图 这时候 突然不知道前端 点击某些筛选之后 sql语句该怎么写了~~ 表结构貌似有点问题? 如上面查询图 现在要查 所有产品 颜色 = ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

产品表

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+ 且 颜色 = 金色的产品 突然脑子有点转不过来了。

###

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

###

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

###

这个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

###

最后的解决方案

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 依次类推
暂未发现什么坑 能完成需求

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 一个数据表查询问题

    一个数据表查询问题

  • 为什么 思否 的验证码图片用新标签打开

    为什么 思否 的验证码图片用新标签打开

  • NoSuchMethodError: scala.Product.$in

    NoSuchMethodError: scala.Product.$in

  • vue动态加载造成页面卡顿是什么原因

    vue动态加载造成页面卡顿是什么原因

腾讯云代理商
海外云服务器