在循环之前获得一个结果

时间:2011-12-08 02:42:40

标签: php mysql

我有一个返回一些结果的查询,然后我使用while循环输出结果。

我遇到的问题是我想在while循环之前返回'问题',这样它就不会在循环内显示多次。

我有以下代码:

$query  = "SELECT * FROM polls LEFT JOIN pollanswers ON polls.pollID = pollanswers.pollID WHERE polls.pollID = 1 ORDER By pollAnswerListing ASC";
$result = mysql_query($query);

echo '<p>Question</p>';
echo '<form action="#" class="poll-form">';
echo '  <p class="error"></p>';
echo '  <fieldset>';

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo '<div class="row">';
    echo '<input type="radio" name="poll" id="'.$row["pollAnswerID"].'" class="radio" value="'.$row["pollAnswerID"].'" /><label for="'.$row["pollAnswerID"].'">'.$row["pollAnswerValue"].'</label>';
    echo '</div>';
}

echo '  </fieldset>';
echo '</form>';

正如您所看到的,循环工作正常,但是如何在输出循环之前从同一个SQL语句输出一次问题?

3 个答案:

答案 0 :(得分:1)

您可以获取一行来显示您的问题(假设您对多行有相同的问题值),然后使用mysql_data_seek()将结果资源回滚到第一条记录以开始循环:

// Retrieve the first row...
$first_row = mysql_fecth_array($result, MYSQL_ASSOC);

// Output your question however you need to...
echo "whatever...";

// Then rewind the result back to zero
mysql_data_seek($result, 0);

// Proceed with the rest of your while loop
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo '<div class="row">';
    echo '<input type="radio" name="poll" id="'.$row["pollAnswerID"].'" class="radio" value="'.$row["pollAnswerID"].'" /><label for="'.$row["pollAnswerID"].'">'.$row["pollAnswerValue"].'</label>';
    echo '</div>';
}

答案 1 :(得分:1)

我相信你不应该这样做。问题本身应该单独检索,而不是检索,因为将其包含在数据库结果的每一行中都是浪费资源。请记住,必须从数据库传递数据(查询结果),而您所做的就是不必要地将这些数据相乘。

你现在可能没有遇到问题,因为似乎有少量可能的答案,但你应该以正确的方式做到。

如果你仍然想按照你的提法去做,那么下面你可以找到两个关于在for循环之前获得结果的解决方案。

不包括for循环

中的第一行

如果您不希望它包含在循环中,请在循环之前执行以下操作:

$row = mysql_fetch_array($result, MYSQL_ASSOC)

并在循环中使用$row时使用$row

包括for循环

中的第一行

在这种情况下,你可以使用@Michael提到的解决方案(类似于我上面的第一个解决方案,但在for循环之前使用mysql_data_seek($result, 0),所以它再次从结果的开头开始,包括第一个行)。

答案 2 :(得分:0)

怎么样:

$row = mysql_fetch_array($result, MYSQL_ASSOC)
if($row) {
  echo '<p>Question</p>';
  echo '<form action="#" class="poll-form">';
  echo '  <p class="error"></p>';
  // echo your poll name here somewhere...
  echo '  <fieldset>';

  do {
     echo '<div class="row">';
     echo '<input type="radio" name="poll" id="'.$row["pollAnswerID"].'" class="radio" value="'.$row["pollAnswerID"].'" /><label for="'.$row["pollAnswerID"].'">'.$row["pollAnswerValue"].'</label>';
     echo '</div>';
  }
  while($row = mysql_fetch_array($result, MYSQL_ASSOC));
  echo '  </fieldset>';
  echo '</form>';
}

当MYSQL查询返回空结果集时,这也修复了旧版中的另一个错误:旧代码会生成伪造的表单。 (修复的原因是,如果没有民意调查,此代码不会生成民意调查表格。)