2014-04-28 101 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