我正在使用 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/