我的查询问题很慢,可能是我错了,这就是我想要的,
我必须在具有相同字段的单个页面上显示超过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 :(得分: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)
数组。
答案 1 :(得分: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。
答案 2 :(得分:-2)
不是打印记录,返回并再次打印,而是将记录放在一个大的字符串变量中,然后为每个下拉列表回显。
$str = "";
while($row = mysql_fetch_assoc($rows)) {
// instead of echo...
$str .= [...];
}
// now for each dropdown
echo $str;
// will print all the rows.