[英]How to remove a php loop to reduce the number of mysql queries
在我正在重构的一段代码中,while循环遍历数据库查询的结果集并执行查询子集。
在大多数情况下,可以提取这些循环以使用更大的传递参数集执行更少的查询。
但是,我不知道如何处理这个特定的查询,其中ORDER BY和LIMIT 1使得如何优化它变得有点棘手。 任何点都欢迎如何处理此查询类型:
例:
$e = array( ... );
foreach($e as $i=>j) {
$sql = "SELECT a FROM b WHERE c = '".(int)$j."' ORDER BY f LIMIT 1";
$res = $db->query($sql);
}
一种可能的方法是选择没有ORDER/LIMIT
条件并通过PHP循环在PHP中进行过滤但只有1个查询,但有没有更好的方法来减少返回的结果集?
编辑: 为了更好地澄清,我正在扩展一些更多的信息。 如果在上面的简化结构中有5000条记录将被返回,那么在优化循环查询之后,我们在最终结果集中也需要5000条记录。 LIMIT 1子句不允许在外部SQL中完成,但我还没有找到一种方法来使用内部查询或子查询。 正是这个元素让我想要更好/更有经验的头脑进行理智检查。
欢迎任何指示! 谢谢
我认为以这种方式构建查询应该可以获得您期望的结果:
SELECT a FROM b WHERE c in(1,2,3,4,5) GROUP BY c ORDER BY min(f);
由于GROUP BY只输出每列“c”的单行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.