因为项目需要主表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查询,所以来这里请教大神看看有没有更好的解决办法或者表设计方案
鸿蒙传说
吃鸡游戏
猛跑小猪
胡说叔叔