排序 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;
}
当我使用以下代码时:
$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;
}