排序 mysql 结果为 php

Sort mysql result in php

当我使用以下代码时:

$result = queryMysql("SELECT * FROM games ORDER BY game ASC");
$num    = $result->num_rows;

for ($j = 0 ; $j < $num ; ++$j)
{

        $row = $result->fetch_array(MYSQLI_ASSOC);
        echo "<input type='checkbox' name='game' value='$row['id']'>$row['game']<br>";
}

结果未按字母顺序显示。它首先是命运,最后是战地。命运ID为1,战地ID为11

为什么没有排序?如果我在 PhpMyAdmin 中使用该命令,我会将列表重新排序。

(很抱歉,如果这太简单了,但我在这里没有找到任何解决方案。所有人都提到使用 ORDER BY,但那不起作用)。

新代码更改为:

$result = queryMysql("SELECT * FROM games ORDER BY game ASC");

while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
    echo "<input type='checkbox' name='game' value='$row['id']'>$row['game']<br>";
}

还是不行。这可能是服务器错误吗?

不确定这里发生了什么,但在睡了 8 小时后我重新加载了页面,它按应有的方式排序(仍然使用 Maximus2012 的示例)。 我想这一定是服务器故障,因为我没有在睡觉时更改代码。

我要感谢 Maximus2012 的快速和良好的回应! (当然也要感谢所有其他人!)

替换为:

$num    = $result->num_rows;
for ($j = 0 ; $j < $num ; ++$j)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo "<input type='checkbox' name='game' value='$row['id']'>$row['game']<br>";
}

用这个:(去掉 $num 和 for 循环)

while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
     echo "<input type='checkbox' name='game' value='$row['id']'>$row['game']<br>";
}

看看是否可行。你不需要 for 循环,因为你没有在任何地方使用 $j 变量。此答案基于以下假设:您的 MySQL 查询为您提供了正确的结果。

您似乎是根据第一个字段 game 而不是实际包含游戏名称的字段进行排序(根据给定的信息无法判断那是什么)。

只需对适当的字段进行排序。

运行 SET NAMES utf8; 请确保您的 table 和字段中有排序规则 utf8_general_ci。检查现场游戏是否有字符集 utf8

然后 运行 在您自己的查询之前进行此查询,看看是否有帮助。

function queryMysql($query)
{
    global $connection;
    $connection->query("SET NAMES utf8");
    $result = $connection->query($query);
    if (!$result) die($connection->error);
    return $result;
}