2017-03-17 97 views
-1

在沒有進展的MySQL的下一行MySQL查詢我試圖運行一個查詢到我的MySQL數據庫通過PHP和和試圖獲得所有結果行。我還必須將每一行與返回的下一行進行比較。我試圖通過將結果變量設置爲另一個臨時變量並調用mysqli_fetch_assoc()來實現此目的,以便while循環再次運行下一行。但是,當我嘗試使用mysqli_fetch_assoc()即使在其他變量上時也會發生什麼,當while($row = mysqli_fetch_assoc($result))轉到下一次迭代時,mysqli_fetch_assoc($result)也會前進到下一行。如何在沒有進展的情況下使用mysqli_fetch_assoc()

下面是代碼的例子來說明這一點:

$query = "SELECT * FROM records ORDER BY num ASC;"; 
    if($result = mysqli_query($conn, $query)) 
    { 
     while($row = mysqli_fetch_assoc($result)) 
     { 
     $temporaryresult = $result; 
     $rowtwo = mysqli_fetch_assoc($temporaryresult);// this makes mysqli_fetch_assoc($result) skip the next row which is unwanted 
     } 
    } 

所以我怎能mysqli_fetch_assoc($result)前進的腳步,當我打電話mysqli_fetch_assoc($temporaryresult)

任何幫助,將不勝感激。

+2

這是一個「行爲」問題嗎?我看到'while($ row'',但你沒有在這裏使用'$ row',你使用'$ rowtwo'作爲最接近的匹配。 –

+0

這只是爲了展示概念,我用$ row做了很多 – programmingandroid

+0

你應該在這裏寫'$ result'而不是'$ temporaryresult' –

回答

0

後@ CBroe的答案,我試圖解決這個問題,同時仍試圖期待。我通過存儲數據庫返回的行並通過它們循環來實現這一點。這使得在返回的行中看起來非常容易,同時避免了將代碼更改爲向後看的複雜性。現在

$array = array(); 
// look through query 
while($row = mysql_fetch_assoc($query)){  
    // add each row returned into an array 

    $array[] = $row; 

} 

,循環遍歷這些行,

$i = 0; 
for(;$i<count($array)-1;$i++) 
{ 
    if($array[$i]['somecolumn']==$array[$i+1]['anothercolumn'])//compare this column to another column in the next row 
    { 
     // do something 
    } 
} 

這成功地解決我的問題。我希望它能幫助任何人陷入我處於相同的位置。

+0

如果你真的想以這種方式編寫代碼,那麼你不能爲全範圍的'$ i

+0

@DhruvSaxena - 編輯答案以迴應您的評論。現在應該工作正常。 – programmingandroid

+0

謝謝。我同意,現在應該是安全的:) –

3

上午試圖通過結果變量設置爲另一個臨時變量,並呼籲該mysqli_fetch_assoc(),以使while循環下一行

它不工作,這再次運行要做到這一點辦法。僅僅因爲您將資源ID分配給第二個變量,並不意味着您現在有第二個結果集,您可以單獨進行操作。這兩個變量都指向相同的資源ID。獲取一行仍然會移動「原始」數據集的行指針。

我也有每一行比較的下一行返回

最有可能的,你是想向前看,使事情對自己更難。像這樣的東西通常更容易完成,當你看以前的行。那個你已經提取了 - 所以你現在不需要做一個額外的提取操作,這會混亂行指針。

僞代碼示例:

$prevRow = null; 
while($row = fetch(...)) { 
    if($prevRow) { // for the first row, this will still be null, so we only 
       // start comparing stuff when that is not the case 
    // compare whatever you need to compare here 
    } 
    ... 
    $prevRow = $row; 
} 
+0

好主意!有時我們必須做相反的事情才能得到我們想要的結果。 – programmingandroid

相關問題