我现在试图解决这个问题很长一段时间,我似乎无法独自完成。
我想存储链接到ID的OPTIONS,并在需要时获得与所有想要的OPTIONS匹配的结果。我想过这样做:
ID | OPTION
aaa | 1
aaa | 2
aaa | 3
bbb | 1
bbb | 2
ccc | 1
ccc | 2
ccc | 5
ccc | 7
ID和OPTION是FOREIGN KEYS。
最终请求看起来像
options_wanted(1,2,5,7)
SELECT * FROM main_table
WHERE crit1=...
AND crit2=...
AND (ALL OPTIONS ARE FOUND IN options TABLE)
我能让它工作还是应该更改实施?
你有什么建议我?
修改
感谢https://stackoverflow.com/a/7505147/2512108,我几乎找到了我想要的东西。
他的查询有效,但最后一列只给出了第一个选项。有没有办法让它返回所有选项AVAILABLE(不仅是想要的选项)?
答案 0 :(得分:2)
答案:
select item_id, group_concat(option_id order by option_id asc) options
from options
where option_id in (1, 2, 3)
group by item_id
having count(option_id) = 3
小提琴:http://sqlfiddle.com/#!9/04f69/3
由于表格架构并未真正明确提及,因此我将离开加入您的其他表格以及其他标准。
修改强> 不,我不会,我讨厌半个答案。
select item_id, group_concat(option_id order by option_id asc) options
from main_table m
inner join options o
on m.id = o.item_id
where option_id in (1, 2, 3)
AND crit1 = 2
AND crit2 = 3
group by item_id
having count(option_id) = 3
更新了小提琴:http://sqlfiddle.com/#!9/45bee/1
如果您希望它返回至少包含所有REQUIRED选项的项目可用的所有选项,那么您的查询是:
select o.item_id, group_concat(o.option_id) options
from options o
inner join (
select item_id
from main_table m
inner join options o
on m.id = o.item_id
where option_id in (1, 2, 3)
AND crit1 = 2
AND crit2 = 3
group by item_id
having count(option_id) = 3
答案 1 :(得分:0)
如你所述: '标准和选项不同'
和
'所有选项都可在选项表'
中找到我假设你有两张桌子;即main_table和options_table
SELECT id, option
FROM main_table
WHERE crit1='value1'
and crit2 = 'value2'
and id IN(
SELECT id
FROM main_table
WHERE option IN (select options from options_table)
GROUP BY id
HAVING COUNT(*) = (select count(options) from options_table)
在此处查找类似的问题: SQL selecting rows where one column's value is common across another criteria column
答案 2 :(得分:0)
制作它!最后,谢谢你
SELECT main_table.*, (SELECT GROUP_CONCAT(feature_id) FROM featuring WHERE main_id = main_table.id) options FROM main_table
RIGHT JOIN featuring
ON main_table.id = featuring.main_id
WHERE featuring.feature_id IN (WANTEDOPTIONS)
GROUP BY main_table.id
HAVING COUNT(DISTINCT featuring.feature_id) = NUMBEROFWANTEDOPTIONS
它为我提供了主要和所有AVAILABLE选项的所有信息 再次感谢。