为了账号安全,请及时绑定邮箱和手机立即绑定

mysql主表关联扩展表(一对多)如何实现搜索

mysql主表关联扩展表(一对多)如何实现搜索

PHP
守着星空守着你 2019-03-11 21:43:11
因为项目需要主表goods表只存了一些基本信息,扩展表goods_ext中用字段key存商品的其他属性,表结构如下: 1.goods表 id goods_name goods_pirce 1 xxx 12 2 xxx 21 2.goods_ext表 goods_id(商品id) key(属性) name(属性名称) value(属性值) 1 level 等级 30 1 money 金币 100 1 address 地址 xxxxx 2 level 等级 50 2 money 金币 1000 2 address 地址 xxxxxx 现在遇到的问题是在列表页进行筛选的时候如果要满足扩展表的多个条件该如何实现?比如我要搜索 level=60 ,money=1000并且价格在10-20之间的的所有商品 可能没有很清楚的描述出我的问题,但希望大家先看懂表结构再回答,看懂表结构就知道我想问的问题,我现在的解决办法如下: SELECT * FROM goods WHERE goods_price >= 10 AND goods_price <= 20 AND goods_id IN ( SELECT g.goods_id FROM( SELECT goods_id, COUNT(goods_id) AS num FROM goods_ext WHERE (`key` ='money' AND value = 1000) OR (`key` ='level' AND value = 60) GROUP BY goods_id HAVING num>=2) AS g ); 由于考虑到效率,不想使用in查询,所以来这里请教大神看看有没有更好的解决办法或者表设计方案
查看完整描述

5 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

这表设计的不怕被打死吗。。

查看完整回答
反对 回复 2019-03-18
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

方法1,使用join
方法2,使用wherein
从goods找出价格在10-20之间的所有goods_id
在goods_ext里wherein,再加上其他条件

查看完整回答
反对 回复 2019-03-18
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

没有人回答吗?

查看完整回答
反对 回复 2019-03-18
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这个可以加多一个中间表:
商品表,保存商品基本信息,商品名称,商品编码...
商品属性表,属性名,属性值...
商品--属性中间表,保存商品-属性关联关系;
再有就是尽量保证SQL语句的简洁性;
纯属个人意见啊...

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 661 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信