php, 选择具有具有多个值的列的行


php, Select row that have a column with multiple values

我有以下类型的设置(有点过于简化):

数组 (php): array('a', 'b', 'c');

表 1:具有值 (1)、(2)、(3)、(其他)的id

表 2:ididT1value值为 (1, 1, 'a')、(2, 1, 'b')、(3, 1, 'c')、

(4, 2, 'c')、(5, 77, 'w')(其他)。

我需要从表 1 中选择行,这些行在表 2 中具有对应的数组中的所有值(在本例中为 id col = 1 的行)。

一种方法是这样的(请忽略可能的错别字)

 <?php
      $query = "SELECT * FROM `table1` WHERE `id` IN ";
      $subqr = "";
      foreach ($arr as $a) {
          if (!$subqr)
              $subqr = "(SELECT `idT1` FROM `table2` WHERE `value` = '$a')";
          else
              $subqr .= " AND `id` IN (SELECT `idT1` FROM `table2` WHERE `value` = '$a')";
      }
      ExecuteQuery($query.$subqr); // Where ExecuteQuery gets query as param.

现在我的问题是...我对解决方案不太满意...我的意思是。。。添加子查询的 foreach 可能不是最佳方法。如果数组有 9999 个元素...9999 个子查询只会杀死 mySQL。还要记住,这过于简单了。

还有其他想法如何做到这一点吗?

如果我

错了,请纠正我,您想从表 1 中选择所有记录,该记录在字段 idT1表 2 上具有 ID。如果是这种情况,您可以尝试

SELECT id
FROM table1
LEFT OUTER JOIN table2
ON table1.id=table2.idT1;

编辑:

SELECT * 
FROM table1 
INNER JOIN table2 
ON table1.id=table2.idT1
WHERE table2.value IN ('a','b','c')
GROUP BY table1.id
HAVING COUNT(DISTINCT table2.value) = 3

所以首先,你需要使用 PHP 内数组的行

WHERE table2.value IN ('a','b','c')

然后此行的 PHP 计数

HAVING COUNT(DISTINCT table2.value) = 3

这将取代 3