【发布时间】:2013-09-25 13:54:36
【问题描述】:
我有以下类型的设置(有点过于简单):
一个数组(php):array('a', 'b', 'c');
表 1:id 具有值 (1)、(2)、(3)、(其他)。
表 2:id、idT1、value,其值为 (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。另请注意,这过于简单化了。
还有其他想法如何做到这一点?
【问题讨论】:
标签: php mysql sql optimization query-optimization