PHP:while 循环中的 mysql_fetch_array() 耗时太长

标签 php mysql optimization performance

我正在使用 PHP/MySQL 为客户创建在线日历。

我发起了一个<table><tr> ,然后有一个 while 循环创建一个新的 <td>对于每一天,最多为一个月中的最大天数。

<td> 之后的行, PHP 通过比较 $i 的值在 MySQL 数据库中搜索当天发生的任何事件。 (计数器)到数据库该行中格式化的 Unix 时间戳的值。为了仅在匹配时增加内部行计数器,我制作了另一个 while 循环,为结果获取一个新数组。它显着减慢了加载时间。

这是代码,已缩短,因此您不必阅读不必要的内容:

$qry = "SELECT * FROM events WHERE author=\"$author\"";
$result = mysql_query($qry) or die(mysql_error());

$row = mysql_fetch_array($result);

for ($i = 1; $i <= $max_days; $i++) {

    echo "<td class=\"day\">";

    $rowunixdate_number = date("j", $row['unixdate']);

    if ($rowunixdate_number == $i) {
        while ($rowunixdate_number == $i) {
            $rowtitle = $row['title'];
            echo $rowtitle;
            $row = mysql_fetch_array($result);
            $rowunixdate_number = date("j", $row['unixdate']);
        }
    }

    echo "</td>";

    if (newWeek($day_count)) {
        echo "</tr><tr>";
    }
    $day_count++;

}

最佳答案

速度缓慢很可能是因为您正在执行 31 个查询,而不是 1 个查询之前您构建 HTML 表,正如 Nael El Shawwa 指出的那样——如果您试图获得所有对于给定作者当月即将发生的事件,您应该在单个 SQL 查询中选择它,然后遍历结果集以实际生成表。例如

$sql = "SELECT * FROM events WHERE author = '$author' ORDER BY xdate ASC";
$rsEvents = mysql_query($sql);
echo("<table><tr>");
while ($Event = mysql_fetch_array($rsEvents)) {
    echo("<td>[event info in $Event goes here]</td>");
}
echo("</tr></table>");

此外,混合使用 SQL 查询和 HTML 生成通常不是一个好主意。您的外部数据应该收集在一个地方,输出数据在另一个地方生成。我的示例通过在 HTML 生成之前立即使用 SQL 来缩短它,但这仍然比让 HTML block 在它的中间包含 SQL 查询要好。

关于PHP:while 循环中的 mysql_fetch_array() 耗时太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818376/

相关文章:

haskell - Haskell:如何检测 “lazy memory leaks”

php - 可选的 LIMIT 用于使用 PDO 抓取所有帖子的功能

php - $file->isValid() 在 laravel 4.2 中返回 false

php - 如何使用 PHP 将一个 SQL 命令的返回值插入到另一个表中

mysql - 远程处理 MySQL 中的大型表时, "good"的预期响应时间是多少?

php - 使用 PHP 和 MySQL 生成强大的唯一用户 ID

php - Symfony2 DOMCrawler selectLink 返回 null uri

php - MySql Processlist 填充了 "Sleep"导致 "Too many Connections"的条目?

PHP 变量(全局)似乎在下一个代码块中变为 NULL

mysql - 是否可以使这个推荐系统 SQL 查询更快?