因为项目需要主表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 回答
- 0 关注
- 661 浏览
添加回答
举报
0/150
提交
取消