繁体   English   中英

如何删除php循环以减少mysql查询的数量

[英]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.

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