我正在尝试添加3个组合框,它们都显示来自我的MySQL数据库的完全相同的信息。看起来我编写的代码会让整个页面等到所有3个组合框都被填充后再继续。
<?
$query = "Select * from tblWriters order by surname";
for ($i = 1; $i <= 3; $i++) {
$result = mysql_query($query);
echo "<tr><td>Writer".$i." *</td><td>";
echo "<select name='txtWriter".$i."' style='width: 200px;'>";
echo "<option value ='' selected='selected'></option>";
while ($row = mysql_fetch_array($result))
{
echo "<option value ='" . $row['id'] . "'> " . $row['surname'] . ", " . $row['name'] . "</option>";
}
echo "</select><td></tr>";
}
?>
我想优化这段代码,因此查询将不会被执行3次,因为我相信这是页面减速的地方。
如果我把
在for循环之外的$ result = mysql_query($ query);
,第二个和第三个组合框不会填充。我试着重置结果的指针,但我似乎无法弄清楚它是如何工作的。
另外,有没有办法可以重复使用while循环,所以我不必执行3次?
有人能指出我正确的方向吗? 我是PHP的新手,并试图自己学习。任何帮助将非常感激。谢谢!
答案 0 :(得分:0)
如果再次将mysql_query()移出循环,可以在循环的开头或结尾使用mysql_data_seek()重置mysql-result-pointer。
这将导致:
mysql_query($query);
for($i=1;$i<=3;$i++);
{
mysql_data_seek(0); // reset datapointer
// output querydata
}
答案 1 :(得分:0)
将查询结果缓存在一个数组中,然后生成标记:
$query = "Select * from tblWriters order by surname";
$result = mysql_query($query);
$data = array();
while ($row = mysql_fetch_array($result))
{
$data[] = $row;
}
for ($i = 1; $i <= 3; $i++) {
echo "<tr><td>Writer".$i." *</td><td>";
echo "<select name='txtWriter".$i."' style='width: 200px;'>";
echo "<option value ='' selected='selected'></option>";
foreach ($data as $row) {
echo "<option value ='" . $row['id'] . "'> " . $row['surname'] .
", " . $row['name'] . "</option>";
}
echo "</select><td></tr>";
}