有没有办法从Zend框架的查询中获取记录数?

Mic*_*ICE 7 php zend-framework zend-db

鉴于下面的泛型选择,有没有办法从Zend Framework获取查询返回的记录数?循环中的$ row ++对于我的解决方案是不可接受的,因为我正在使用分页(尽管它不在我的示例中).

我也不想用"Count(*)"添加另一个查询.

$query = "Select * from Users where active = 1";
$stmt = $db->query($query);

$noOfRows = ???;

while ($row = $stmt->fetch())
{

  // processing
}
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 13

它仍然需要另一个查询,但是MySQL有一个SELECT参数SQL_CALC_FOUND_ROWS- 它可以在您的连接中存储一个值SELECT FOUND_ROWS()

注意 - 初始查询的性能会下降,因为限制将在稍后处理,但可能比单独的COUNT()更快.

FOUND_ROWS()

$query = "Select SQL_CALC_FOUND_ROWS * from Users where active = 1 limit 20";
$stmt = $db->query($query);

while ($row = $stmt->fetch())
{

  // processing
}

$count = $db->fetchOne('SELECT FOUND_ROWS()');
Run Code Online (Sandbox Code Playgroud)


Byr*_*ock 2

使用 fetchAll()

fetchAll 返回一个数组,因此您可以执行以下操作:

$rows = $db->fetchAll("select ...");
$numRows = sizeof($rows);
foreach ($rows as $row)
{
  // process each row
}
Run Code Online (Sandbox Code Playgroud)

  • 无意诋毁拜伦 - 请记住,迈克,如果您不使用所有行中的数据,这是非常低效的,并且到目前为止最好执行一个附加查询来计算行数。 (2认同)