繁体   English   中英

在联接表中选择需要为每个链接满足多组条件的项目

[英]Select item in join table where multiple sets of conditions need to be met for each link

我有一个结构设置,其中条件可以有多个值(OR子句),并且必须满足所有条件(AND子句),条件的数量是动态的,并且每次查询都可以增加或减少。

我想在项满足所有条件的ItemsCondition_Values (items_values)的联接表上执行查找。 链接本身是从ItemsCondition_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM