我需要一些帮助来修复我的一些代码。
我有一个从表中提取多行的查询,但我需要它来计算“价格”列之一中的总值。
我的总计算工作正常并输出,但它似乎打破了我在页面下方的重复区域。我假设它与 WHILE 语句有关,但我不完全确定如何修复它。任何人都可以建议一种修复方法或提供替代方法。
mysql_select_db($database_otters, $otters);
$query_CartDetails = "SELECT eventregistrations.*, swimmers.*, events.*, eventtypes.*, timetable.* FROM eventregistrations LEFT JOIN swimmers ON eventregistrations.SwimmerID=swimmers.SwimmerID LEFT JOIN events ON eventregistrations.EventID=events.EventID JOIN eventtypes ON events.EventTypeID=eventtypes.EventTypeID JOIN timetable ON eventregistrations.ParentDiaryID=timetable.DiaryID WHERE eventregistrations.SessionID = '$sessionid'";
$CartDetails = mysql_query($query_CartDetails, $otters) or die(mysql_error());
$row_CartDetails = mysql_fetch_assoc($CartDetails);
$totalRows_CartDetails = mysql_num_rows($CartDetails);
$cartvalue= 0;
while ($num = mysql_fetch_assoc($CartDetails)) {
$cartvalue += $num['Price'];
}
这是重复区域的代码,如果我注释掉上面的“cartvalue”部分,它可以正常工作:
<?php do { ?>
<tr>
<td><?php echo $row_CartDetails['Fixture']; ?></td>
<td><?php echo $row_CartDetails['EventType']; ?></td>
<td><?php echo $row_CartDetails['SwimmerFName']; ?> <?php echo $row_CartDetails['SwimmerSName']; ?></td>
<td>£<?php echo $row_CartDetails['EventCost']; ?></td>
</tr>
<?php } while ($row_CartDetails = mysql_fetch_assoc($CartDetails)); ?>
最佳答案
是的,问题就在这里
while ($num = mysql_fetch_assoc($CartDetails)) {
$cartvalue += $num['Price'];
}
您正在循环遍历结果集,白色循环之后的指针将设置为结果集的末尾。因此,如果您对同一结果集进行进一步迭代,那么您很可能什么也得不到。
在这种情况下,当您需要再次进行迭代时,您需要使用
重置指针所以在运行第二个循环之前做一些事情
mysql_data_seek($CartDetails, 0) ; // this will set the pointer to the 1st row
注意:您正在使用已弃用的 mysql 函数版本,开始使用 mysqli 或 pdo 和准备好的语句。
关于PHP MySQL 专栏总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504287/