我有一个返回一些结果的查询,然后我使用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语句输出一次问题?
答案 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查询返回空结果集时,这也修复了旧版中的另一个错误:旧代码会生成伪造的表单。 (修复的原因是,如果没有民意调查,此代码不会生成民意调查表格。)