我有一個簡單的PHP文件,它從MySQL數據庫中取出行,刪除特定部分的信息並在不同部分吐出。每個數據庫條目都有一個時間戳應用於它,我用它來排序。將時間戳和實際內容放入$ sortholder變量中時,會用「#」字符分隔。經過排序後,我使用strstr刪除無用的時間字符到#,然後用substr刪除#本身。由於某些數據庫條目實際上並沒有時間戳,我想從列表中刪除這些條目。要做到這一點,我只是做了一個臨時變量來保存$ sortholder的substr從0-2,並檢查是否($ temp!=「0#」)。簡單的php條件語句後很長的延遲
該聲明可以正常工作並提供正確的輸出,但由於某種原因,它在處理之前會導致延遲最多1分鐘。如果我刪除了「if($ temp!=」0#「)」,它會立即生效。爲什麼這樣一個簡單的條件會導致如此長的延遲?
<?php
include("dbsetup.php");
$result = mysql_list_tables($dbname);
$x=0;
if (!$result)
{
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result))
{
// added code to use the tablename and select all records from that table
$sql="select * from " . $row[0];
$result2 = mysql_query($sql) or die ('SQL problem selecting from table');
if (mysql_num_rows($result2) >= 1)
{
while ($row2 = mysql_fetch_row($result2))
{
for ($i=7; $i<mysql_num_fields($result2); $i+=7,$x++)
{
$sortholder[$x] = $row2[$i+1]."#<b>".$row2[$i-3].
":</b> <br><br><br>".$row2[$i]."<br><br>";
}
}
sort($sortholder);
while ($x >= 0)
{
$temp = substr($sortholder[$x], 0, 2);
if ($temp != "0#")
{
$tempstr = strstr($sortholder[$x], "#");
echo substr($tempstr, 1);
echo ("<div id=\"bookbar\"></div><br><br>");
$x--;
}
}
} else {
echo ("Guest book empty");
}
mysql_free_result($result2);
}
mysql_free_result($result);
?>
您知道您正在處理數據庫中* all *表的* all *條目嗎?這本身非常浪費。如果您只想要數據庫的一部分,請使用SQL WHERE語句在數據庫**中過濾**。排序也應該由數據庫來完成,而不是在事後使用PHP。我建議你先閱讀一本關於SQL的書。 – deceze 2011-05-26 08:29:08
你聽說過[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization) – diEcho 2011-05-26 08:29:49
是的,我意識到這是糟糕的編程......我現在正在閱讀這個主題。至少目前來看,它不像看起來那樣「浪費」。無論如何,只有一張桌子可以解析(而且在那個桌子上還是一個相當小的桌子)。 – 2011-05-26 08:41:44