2013-08-02 73 views
0

我正在使用mysqli_fetch_assoc將數據推入行數組。mysqli_fetch_assoc按順序返回數據嗎?

$res = mysqli_query($link, $query); 
$rows = array(); 
while($r = mysqli_fetch_assoc($res)) { 
$rows[] = $r; 
echo "<br>location:".$r["assigned"]."||".$r["amount"]."<br>"; 
} 

我在這個php文件中看到的順序和我在mysql命令行上執行查詢時看到的順序不同。最後和倒數第二行在php中交換。

在mysql查詢中我使用了order by timestamp子句。

我已經搜索到mysql_fetch_assoc,但沒有發現任何人遇到任何類似的問題。

+2

由PHP返回是由數據庫給它相同的順序數據的順序。 – Spudley

+2

'timestamp'是表中的一列嗎?也許你有兩行'timestamp'完全相同。在這種情況下,您可以對行進行不同的排序。 –

+1

如果您想要訂購,請在SQL中使用'ORDER BY'子句。 – christopher

回答

3

返回給PHP的數據順序是由mySQL返回的順序。

如果時間戳是相同的,並且這是唯一的ORDER BY字段,那麼是的,mySQL完全有可能從相同的查詢給出不同的命令。

爲什麼它會以不同的順序提供它們之間的相同查詢是未知的;也許是從緩存或類似的東西呢?但最終的觀點是,如果沒有指定的排序順序來區分記錄,那麼數據庫可以按照它喜歡的任何順序自由提供。

如果你確實希望他們總是以相同的順序來進行,即使有嘟嘟聲,簡單的答案是將主鍵字段添加到ORDER BY子句的末尾。 (你有一個唯一的主鍵字段,對嗎?吧??

+0

它可以在php.ini或apache中進行一些設置嗎?我確實有一個主鍵,但是這個要求並不能保證對此有幫助。已經想通過添加另一個字段。 –

+0

@NaveenSharma - 夠公平的。我建議主要領域是迫使它始終處於同一順序的最後一招。如果你有另一個領域可以勝任,那很好。 – Spudley

2

默認情況下,數據庫返回數據的順序爲undefined。沒有人對返回的數據順序做出任何保證。如果您想要特定訂單,請使用ORDER BY條款。這不是特定於獲取數據的任何特定方式。