MYSQL过滤表由相关选项表和分组记录组成

时间:2012-03-20 08:25:36

标签: mysql

我有三张桌子:

项目:

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

2 个答案:

答案 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 ...

获得重复的行