0

我正在使用 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.ini 中交换。

在 mysql 查询中,我使用了一个order by timestamp子句。

我搜索了 mysql_fetch_assoc 但没有发现其他人遇到过任何类似的问题。

4

3 回答 3

3

返回给 PHP 的数据顺序是 mySQL 返回给它的顺序。

如果时间戳相同并且这是唯一的ORDER BY字段,那么是的,mySQL 完全有可能从同一个查询中给出不同的命令。

为什么它会在相同的查询之间以不同的顺序提供它们是未知的;也许是缓存或类似的东西?但最终的一点是,如果没有指定区分记录的排序顺序,那么数据库可以自由地以它喜欢的任何顺序提供它们。

如果您真的希望它们始终以相同的顺序出现,即使有重复,简单的答案是将您的主键字段添加到ORDER BY子句的末尾。(你确实有一个唯一的主键字段,对吧?对吧??

于 2013-08-02T09:13:50.050 回答
2

默认情况下,数据库返回数据的顺序是未定义的。没有人对返回数据的顺序做出任何保证。如果您想要特定的顺序,请使用ORDER BY子句。这并不特定于任何一种特定的获取数据的方式。

于 2013-08-02T09:11:52.020 回答
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'
于 2019-10-10T21:00:38.230 回答