【问题标题】:mysql_fetch_array add all rows?mysql_fetch_array 添加所有行?
【发布时间】:2011-06-06 07:30:42
【问题描述】:

如何将 mysql_query 中的所有行添加到 mysql_fetch_array() 中?我希望能够尽可能高效地完成它,因为它可以处理很多行。

【问题讨论】:

  • 我不明白你想做什么。请澄清你的问题。您想对某些行值求和吗?
  • 标准while ($row = mysql_fetch_assoc($result)) { echo $row['id']; }有什么问题?
  • 不,只需使用 mysql_query() 创建一个嵌套数组。我猜 mysql_fetch_array() 只得到一行,我需要得到所有这些。

标签: php mysql


【解决方案1】:

最常见的方式:

$rows = array();

while(($row = mysql_fetch_array($result))) {
    $rows[] = $row;
}

as shown in the examples in the documentation.

【讨论】:

  • 我无法让自己写下这个答案。
【解决方案2】:
<?php

$db = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);

$startTime = microtime(true);

$result = $db->query("select * from users");

$users = $result->fetch_all(MYSQLI_ASSOC); // faster

// while($row = $result->fetch_assoc()) $users[] = $row; //slower

echo sprintf("%d users fetched in %s secs", 
    count($users), number_format(microtime(true) - $startTime, 6, ".", ""));

$db->close();

?>

编辑一些运行时统计数据

$users = $result->fetch_all()

  1000 users fetched in 0.001462 secs
  5000 users fetched in 0.005493 secs
 15000 users fetched in 0.015517 secs
 50000 users fetched in 0.051950 secs
100000 users fetched in 0.103647 secs

对比

while($row = $result->fetch_assoc()) $users[] = $row; 

  1000 users fetched in 0.001945 secs
  5000 users fetched in 0.008101 secs
 15000 users fetched in 0.023481 secs
 50000 users fetched in 0.081441 secs
100000 users fetched in 0.163282 secs

有趣:)

【讨论】:

  • 一个更好的答案,只是因为它避免了“相对缓慢”的 PHP while 循环,如果有 5 亿行,这可能会有点影响。
  • 你的 +1 来自我,..有趣。
  • 大声笑 - 可惜你不是询问效率的提问者:P
猜你喜欢
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2013-03-05
  • 2018-06-22
  • 1970-01-01
  • 2011-11-10
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多