【发布时间】:2013-11-07 12:35:30
【问题描述】:
我不确定这个问题是否有答案,但我在想 PHP 在使用 while 循环时速度不是很快。这让我想到了一个基本函数,它执行以下操作:
$array = array();
$sItem = DB::cms_query("SELECT id FROM someTable");
while($fItem = $sItem->fetch_assoc() ){
$array[] = $fItem['id']; // store the id in an array
}
这会给我一个包含所有找到的 id 的数组。我想知道的是:
是否可以在 1 个查询中选择所有这些 id 并仅使用一次提取(因此无需循环提取),而不会创建困难的代码。目标是选择所有 id 的一段简单代码。
小修改:我可以用 fetch_row() 替换 fetch_assoc() 来改进一点点,但我正在寻找替换循环
回答一些问题:
我在自己的自定义数据库类中使用 mysqli(我是 OO 新手,所以我可能会及时改进它,但那是另一回事了)
【问题讨论】:
-
您使用的是什么数据库 API? PDO 有
fetchAll(),它可以一举获取所有内容。 -
如果您使用 PDO,这是可能的。它将所有结果提取到一个数组中,您可以使用您选择的任何方法循环该数组。至于php在while循环中很慢..定义慢。 1 毫秒?
-
在您的数据库查询中使用 GROUP_CONCAT 以便只返回包含所有 ID 的一行,而不是每个 ID 的一行......但是与实际查询执行相比,while 循环非常快,所以这确实是一个微优化
-
@Barmar:不,mylsqi。 N.B.:不太确定“慢”的定义是什么,它更具假设性,以及尝试一些不同的方法
-
如果你使用的是mysqli,那么答案是否定的。