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

因为项目需要主表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查询,所以来这里请教大神看看有没有更好的解决办法或者表设计方案

守着星空守着你
浏览 664回答 5
5回答

鸿蒙传说

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

吃鸡游戏

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

猛跑小猪

没有人回答吗?

胡说叔叔

这个可以加多一个中间表:商品表,保存商品基本信息,商品名称,商品编码...商品属性表,属性名,属性值...商品--属性中间表,保存商品-属性关联关系;再有就是尽量保证SQL语句的简洁性;纯属个人意见啊...
打开App,查看更多内容
随时随地看视频慕课网APP