2013-08-02 42 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条款。这不是特定于获取数据的任何特定方式。