在我重构的一段代码中,一个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”的一行.