检查一组元素是否包含在另一组中


check if a group of elements are included in another group

我有以下设置:

php中的数组如下:

 $arr = array(1, 2, 3, 4);

查询如下:

 SELECT `epicThing` FROM `epicTable` AS `epic`
 WHERE
     SELECT `ids` FROM `someTable` 
     WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
     (<<<< HERE IS MY PROBLEM >>>>)

子查询返回类似(1,2,3,4,5,6,7,8,9)的内容。

现在我需要检查的是,数组中的每个元素都在子查询的返回答案中。

基本上类似

 SELECT `epicThing` FROM `epicTable` AS `epic`
 WHERE
     '1' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      )
 AND 
     '2' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      )
 AND
     '3' IN (
         SELECT `ids` FROM `someTable` 
         WHERE `epic`.`somethingSomething` = `someTable`.`somethingElse`
      ).......

但对于每一个元素。

为了简单起见,假设元素总是有序的(因为我可能需要将数组转换为字符串),如果不可能的话。但如果可以的话,我更喜欢一个通用的解决方案。

我不想做的是在php中获取数据并在那里进行检查(这只是一个巨大查询中非常小的一部分)。

如果我正确理解你的问题,我认为这将是测试数组中所有ID是否与数据库中的记录匹配的最简单方法:

<?php
    $myArray = array(1,2,3);
    $myArrayCount = count($myArray);
    // Convert array for the query
    $queryArray = implode(",", $myArray);
    SELECT COUNT(DISTINCT(YourTable.id)) AS count
    FROM YourTable
    WHERE YourTable.id IN ($queryArray)
    HAVING count = $myArrayCount;
?>

如果HAVING计数=$myArrayCount与您正在检查的ID数不匹配。