2011-09-24 43 views
0

我有慢查询的问题,可能是我错了,这是我想要的东西,最快的方式,以显示MySQL数据库记录

我在与同一领域的一个页面,显示超过40下拉列表,通过DB牵强,但我觉得这个查询花费的时间来执行,还可以使用更多的资源..

这里有一个例子...

$sql_query = "SELECT * FROM tbl_name"; 
$rows = mysql_query($sql_query); 

现在我while循环使用打印所有记录该查询在下拉列表中,

但我有转载相同的记录在下一个下拉列表中多达40所列出,所以我用

mysql_data_seek()移动到第一条记录,然后重新打印下一张表,并以此类推,直到40名名单。

但是这看起来很慢,给我,让我用第二种方法是这样相同的查询所有40所列出

$sql_query2 = "SELECT * FROM tbl_name"; 
$rows2 = mysql_query($sql_query2); 

你认为我错了查询的速度,或者你建议我另一种方式是比这些方法更快......

+0

谢谢大家...... –

回答

-2

而不是打印记录,回去,并再次打印它们,将记录放在一个大的字符串变量,然后回显它为每个下拉菜单。

$str = ""; 
while($row = mysql_fetch_assoc($rows)) { 
    // instead of echo... 
    $str .= [...]; 
} 
// now for each dropdown 
echo $str; 
// will print all the rows. 
3

尝试把行到一个数组,像这样:

<?php 
$rows = array(); 

$fetch_rows = mysql_query("SELECT * FROM table"); 
while ($row = mysql_fetch_assoc($fetch_rows)) { 
    $rows[] = $row; 
} 

然后,只需使用$rows阵列中的一个foreach ($rows as $row)循环。

0

从MySQL结果资源中提取行相关的处理开销相当大。通常,将结果作为数组存储在PHP中会比使用RDBMS重新查询和提取同一行集快得多。

$rowset = array(); 
$result = mysql_query(...); 
if ($result) { 
    while ($row = mysql_fetch_assoc($result)) { 
    // Append each fetched row onto $rowset 
    $rowset[] = $row; 
    } 
} 

如果查询返回大量的行(十万或数百万数千或数万)的,你需要使用所有这些,你可以通过所有行存储到PHP中的数组达到内存限制。在这种情况下,从MySQL中单独获取行可能会更具内存保守性,但它仍然可能会占用更多的CPU资源。