[英]Select item in join table where multiple sets of conditions need to be met for each link
我有一个结构设置,其中条件可以有多个值(OR子句),并且必须满足所有条件(AND子句),条件的数量是动态的,并且每次查询都可以增加或减少。
我想在项满足所有条件的Items和Condition_Values (items_values)的联接表上执行查找。 链接本身是从Items到Condition_Value的,而我正在对SQL进行预格式化,以将condition_value_ids分组为适当的有条件的组,如下所示:
(1 OR 5 OR 6 OR 9), (2 OR 10 OR 15), (9 OR 22 OR 33)
在某个时候在一起与。
我正在寻找一种方法来进行SQL查询,该方法选择一个唯一的Item_Id ,其中要满足所有条件,并链接到每个组中的至少一个condition_value_ids 。
像这样的表:
ITEM_ID CONDITION_VALUE_ID
1 1
1 5
1 10
1 22
1 33
2 5
2 9
2 55
3 9
3 15
3 22
会向我返回ID为1和3的ItemS(因为1/3与每个条件组中的至少1条condition_value_id链接匹配,所以2在每个组中均没有至少1个匹配项)。 我最好的猜测是内部语句的巨大混乱,就像检查一样
SELECT * FROM items_values
WHERE EXISTS(
SELECT TOP 1 1 FROM items_values WHERE condition_value_id IN (1, 5, 6, 9))
) AND
.....
或者,我可以将带有条件item_id的condition_value_ids GROUP BY的清单简单列出,并在PHP中手动进行搜索,但是这似乎太过费力,无法收集每个项目,每个搜索。
朝正确方向提出的任何建议将不胜感激。
编辑
这样的东西(下面是它们的修改版本):
SELECT ITEM_ID,GROUP_CONCAT(CONDITION_VALUE_ID) AS VALUE_IDS, COUNT(CONDITION_VALUE_ID) FROM TEST
GROUP BY ITEM_ID
HAVING COUNT(CONDITION_VALUE_ID) > 1;
然后可以在每个VALUE_IDS上执行LIKE,或者仅执行in_array检查以匹配PHP中的每个条件,但是我希望可以在查询中完成。
查看此SQL Fiddle 。
您是否正在寻找查询或其他方式提供的解决方案。
我的查询是:
SELECT ITEM_ID,
CONDITION_VALUE_ID,
GROUP_CONCAT(ITEM_ID) AS COMMON_ITEM_ID,
COUNT(CONDITION_VALUE_ID)
FROM ITEMS_VALUES
GROUP BY CONDITION_VALUE_ID
HAVING COUNT(CONDITION_VALUE_ID) > 1;
如果您还有其他要求,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.