循环数据库

时间:2013-05-13 10:56:55

标签: php mysql while-loop

所以,通常我会循环遍历这样的数据库;

while($row = mysql_fetch_array($result)) {
 // echoes here
}

这很好用。但是如果我想做点什么呢?

<h1><?= $row["category_name"]; ?></h1>
<p><?= $row["description"]; </p>

while($row = mysql_fetch_array($result)) {
 // echoes here
}

这当然不起作用,因为mysql_fetch_array低于第一个$row。但是像这样的东西不起作用..(无限循环)。

$row = mysql_fetch_array($result);

<h1><?= $row["category_name"]; ?></h1>
<p><?= $row["description"]; </p>

while($row) {
 // echoes here
}

解决此问题的最佳方法是什么?第一个回声的另一个数据库查询?

2 个答案:

答案 0 :(得分:3)

第一个:停止使用mysql,不推荐使用它。开始查看mysqlipdo

现在我猜你的所有行都包含category_name的相同数据,这就是你想先打印它的原因。最简单的方法是,如果您处于while循环的第一次迭代中,请跟踪。

<?php
$counter = 0;
while ($row = mysql_fetch_array($result)) {
   $counter++;
   if ($counter==1) {
    echo '<h1>'.$row['category_name'].'</h1><p>'.$row['description'].'</p>';

     //now if your first row only contains this information and doesnt have any regular data, uncomment the continue line.
     //continue;
   } 

   //echoes the regular rows.

}
?>

这也可以扩展到检查类别名称是否实际更改。因此,您可以在更改标题时打印标题。

<?php
$header = "";
while ($row = mysql_fetch_array($result)) {
   if ($header!=$row['category_name']) {
    echo '<h1>'.$row['category_name'].'</h1><p>'.$row['description'].'</p>';
    $header = $row['category_name'];
   } 

   //echoes the regular rows.
}
?>

现在每次类别名称更改时,标题都将打印出描述。请注意,您的查询确实需要在category_name上设置ORDER BY才能使其正常工作,否则您最终可能会遇到重复的标题。

答案 1 :(得分:2)

仅获取第一行,将指针移动到第二行,然后遍历结果。

$row = mysql_fetch_array($result);

<h1><?= $row["category_name"]; ?></h1>
<p><?= $row["description"]; </p>

mysql_data_seek($result,1);

while($row= mysql_fetch_array($result)) {
   // echoes here
}