2014-07-01 83 views
1

我需要一些幫助來修復一些我有的代碼。PHP MySQL列總數

我有一個查詢,從表中抽出一些行,但我需要它來在其中一列'價格'的總價值。

我得到了總計算工作正常和輸出,但它似乎打破我的重複區域進一步向下頁面。我認爲這與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)); ?> 
+3

mysql已棄用。你應該遷移到像pdo這樣的東西。只是說。 – Gogol

+1

在「重複區域」之前,您已經遍歷了一組「mysql_fetch_assoc($ CartDetails)」,因此當您再次使用它時,它無法再返回。 – ljacqu

+0

如果工作不正常,你會得到什麼? – EmCo

回答

0

有問題就在這裏

while ($num = mysql_fetch_assoc($CartDetails)) { 
    $cartvalue += $num['Price']; 
} 

你是循環結果集和白循環後的指針將被設置爲結果集的結尾。所以如果你對相同的結果集做進一步的迭代,那麼你很可能什麼也得不到。

在這種情況下,當你需要再做一次迭代,你需要使用

mysql_data_seek

重置指針,以便在運行第二循環開始前做一些如

mysql_data_seek($CartDetails, 0) ; // this will set the pointer to the 1st row 

注意:正在使用不推薦使用的mysql函數版本,使用mysqli或pdo與準備好的語句開始。

+0

嘗試了這一點,它似乎現在正在提出正確的值(之前沒有意識到),但是重複區域仍然斷裂:-( –

+0

不瞭解重複區域 –

+0

重複區域只是echo的將每行放入表中,以便查看查詢結果中的內容。 –

0

你好可能的原因,我可以找出是做while循環將運行第一次while條件永遠是真還是假,所以我建議你while循環

<?php while ($row_CartDetails = mysql_fetch_assoc($CartDetails)) { ?> 
<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 } ?> 

上面的代碼將使用保存額外<tr> </tr >