我正在使用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但没有发现任何其他人遇到类似问题。
答案 0 :(得分:3)
返回给PHP的数据顺序是mySQL返回给它的顺序。
如果时间戳是相同的并且是唯一的ORDER BY
字段,那么是的,mySQL完全可以从同一查询中提供不同的订单。
为什么它会在相同的查询之间以不同的顺序提供它们是未知的;也许是缓存中的神器或类似的东西?但最终的一点是,如果没有指定区分记录的排序顺序,那么数据库可以按照自己喜欢的顺序自由提供。
如果你真的希望它们总是以相同的顺序出现,即使存在重复,简单的答案是将主键字段添加到ORDER BY
子句的末尾。 (你做有一个唯一的主键字段,对吧?对吗?)
答案 1 :(得分:2)
默认情况下,数据库返回数据的顺序为 undefined 。没有人对返回的数据顺序做出任何保证。如果您需要特定订单,请使用ORDER BY
子句。这并非特定于获取数据的任何特定方式。
答案 2 :(得分:0)
我有同样的问题。我使用ORDER BY
在MySQL中获取排序后的数组。
在MySQL控制台上执行此查询,结果是完美的:
SELECT * FROM I_data_grab WHERE auid='3' ORDER BY 'tempo'
但是用PHP提取的SAME查询返回了未排序的数组。
我解决了这样删除“ tempo”变量中的“”的问题:
SELECT * FROM I_data_grab WHERE auid='3' ORDER BY tempo
代替:
SELECT * FROM I_data_grab WHERE auid='3' ORDER BY 'tempo'