2014-04-28 102 views
0

我做了一個快速的基於MYSQL的新聞飼料到我的網站,我用數據庫中的最後四個新聞寫了一個while函數+ fetch_arry ..我記得它工作的很好時我使用了這樣的腳本,但是使用這個腳本,我的代碼速度很慢,達到了18-20秒,這對於我的追隨者來說並不是最好的。導致問題的原因或者如何加速抓取向上?PHP + MySQL慢結果使用while循環

$e = mysql_query('SELECT * FROM hirek ORDER BY date DESC LIMIT 4'); 
if (!$e) { 
    die(mysql_error()); 
    $count = 0; 
    } 
$get_hir = mysql_num_rows(mysql_query("SELECT * FROM hirek ORDER BY date DESC LIMIT 4")); 
if ($get_hir <= 0) 
{ 
echo '<div class="lil-box lil-box-tl"><div><center><h4>Nincsennek hírek!</h4></center></div></div>'; 
} else { 
while($row = mysql_fetch_array($e)) 
{ 
echo '<div class="lil-box lil-box-tl">'; 
    echo '<h4>'.$row['cim'].'</h4>'; 
    if($row['kep'] == 0) 
    { 
    echo '<div class="icon"><img alt="" src="images/icon-info.png" width="24" /></div>'; 
    } else if($row['kep'] == 1) { 
    echo '<div class="icon"><img alt="" src="images/icon-up.png" width="24" /></div>'; 
    } else if($row['kep'] == 2) { 
    echo '<div class="icon"><img alt="" src="images/icon-euro.png" width="24" /></div>'; 
    } 
    echo tores($row['post'],65); 
    echo '</div>'; 

} 
} 

( 'tores' 是strlen函數。)

+1

你爲什麼要執行SELECT * FROM僱傭的ORDER BY日期DESC LIMIT 4''兩次?更改'$ get_hir = mysql_num_rows(mysql_query(「SELECT * FROM僱傭ORDER BY date DESC LIMIT 4」));''''get_hir = mysql_num_rows($ e);' –

回答

0

你正在排序的字段(一個時間查詢)

ALTER TABLE `hirek` 
ADD INDEX `date` (`date`); 

這應該向您的查詢工作創建索引因此索引要快一點。

而且重寫代碼:

$e = mysql_query('SELECT * FROM hirek ORDER BY date DESC LIMIT 4'); 
if (!$e) { 
die(mysql_error()); 
$count = 0; 
} 
$rows = array(); 
while($row = mysql_fetch_array($e)) $rows[] = $row; 

if (count($rows) == 0) { 
echo '<div class="lil-box lil-box-tl"><div><center><h4>Nincsennek hírek!</h4></center></div></div>'; 
} else { 
    foreach ($rows as $row) 
    { 
     echo '<div class="lil-box lil-box-tl">'; 
     echo '<h4>'.$row['cim'].'</h4>'; 
     if($row['kep'] == 0) 
     { 
      echo '<div class="icon"><img alt="" src="images/icon-info.png" width="24" /></div>'; 
     } 
     else if($row['kep'] == 1) { 
      echo '<div class="icon"><img alt="" src="images/icon-up.png" width="24" /></div>'; 
     } else if($row['kep'] == 2) { 
      echo '<div class="icon"><img alt="" src="images/icon-euro.png" width="24" /></div>'; 
     } 
     echo tores($row['post'],65); 
     echo '</div>'; 
     } 
} 

這是一個方法來做到這一點(很多),而兩次執行查詢。 也考慮切換到mysqli/pdo,因爲mysql_ *已被棄用。

+0

謝謝,現在速度更快,但它仍然需要7-8秒加載。但無論如何,這比20秒更好,所以..謝謝^^還有什麼想法? – MadCatz

+0

我編輯了答案 - 現在就試試。當然,Mark Ba​​rker的想法也不錯。 – Seti