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

在我重构的一段代码中,一个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中执行此操作,但是我还没有找到一种对内部查询或子查询执行此操作的方法.我想用更好/更多有经验的头脑来理智检查此元素.

任何指针欢迎!
谢谢

解决方法:

我认为以这种方式构建查询应该可以为您带来预期的结果:

从(b,c,(1,2,3,4,5)中的c的ORDER BY的min(f)中选择b.

由于GROUP BY将只输出每列“ c”的一行.

上一篇:从一个ISP移至另一个ISP而不改变IP的方案


下一篇:PHP MySQLi参数化查询不起作用