我有三张桌子:
项目:
id name
4 Item Blue, L
2 Item Blue, S
6 Item Green
8 Item L
9 Item Red, Blue, Green, S, M, L
5 Item Red, L
3 Item Red, M
1 Item Red, S
7 Item S
选项:
id group name
1 1 red
2 1 blue
3 1 green
4 2 s
5 2 m
6 2 l
items_has_options:
item_id options_id
1 1
1 4
2 2
2 4
3 1
3 5
4 2
4 6
5 1
5 6
6 3
7 4
8 6
9 1
9 2
9 3
9 4
9 5
9 6
如何选择具有选项的项目:(红色或蓝色或绿色)和(s)?我需要选择具有不同组别选项的项目。选项可能有很多组,而不仅仅是两组。结果必须是:
2 Item Blue, S
9 Item Red, Blue, Green, S, M, L
1 Item Red, S
答案 0 :(得分:0)
我没有测试过这个,但是,应该工作
SELECT count(iid), i.name FROM items i
INNER JOIN items_has_options ihs ON
i.id = ihs.item_id
INNER JOIN options oON
ihs.options = o.id
WHERE i.name ='Item Blue, S'
答案 1 :(得分:0)
不确定这会有效,但可能会让你开始......
SELECT DISTINCT i.id, i.name FROM items i
INNER JOIN items_has_options ihs1 ON
i.id = ihs1.item_id
INNER JOIN items_has_options ihs2 ON
i.id = ihs2.item_id
INNER JOIN options o1 ON
ihs1.options = o1.id AND (o1.name = "red" OR o1.name = "blue" OR o1.name="green")
INNER JOIN options o2 ON
ihs2.options = o2.id AND o2.name = "s"
这个想法是你加入选项表两次,一次是彩色,一次是大小。 您需要使用distinct,因为您将从o1 ...
获得重复的行