php - ORDER BY 在 PHP/MySQL 中未按预期工作

标签 php mysql sql sql-order-by union

我的代码:

$afer_result = mysql_query("SELECT * FROM aq_afers WHERE aferId = '".$afer_id."'");

while ($afer = mysql_fetch_array($afer_result)) {
$item_result = mysql_query("SELECT * FROM aq_".$afer['ItemCategory']."s WHERE ItemId = '".$afer['ItemId']."' ORDER BY ItemLevel");
$item = mysql_fetch_assoc($item_result);

echo $item['ItemLevel'];
echo "\n";
}

我希望输出是一个从最低到最高排序的数字列表,但这就是我的输出:

10
37
62
15
35
55
75
95
105
70
40
50
15
35
1
55

知道为什么 ORDER BY 没有像我预期的那样工作吗?

最佳答案

您的代码的问题是您在循环内运行多个查询。每个查询的结果都是有序的,但全局结果不是有序的。

解决方案是使用循环构建 UNION sql 查询。您可以在循环外运行查询; UNION 查询的 ORDER BY 子句全局应用于其结果。当然,这假设所有查询返回相同的列(否则您需要调整代码)。

代码;

$afer_result = mysql_query(
    "SELECT * 
    FROM aq_afers 
    WHERE aferId = '".$afer_id."'"
);

$sql_parts = array();
while ($afer = mysql_fetch_array($afer_result)) {
    array_push(
        $sql_parts,
        "SELECT * 
          FROM aq_".$afer['ItemCategory']."s
          WHERE ItemId = '".$afer['ItemId']."'"
    );
}

$sql = join(' UNION ALL ', $sql_parts);
$item_result = mysql_query($sql . 'ORDER BY ItemLevel');
while ($item = mysql_fetch_array($item_result)) {
    echo $item['ItemLevel'];
    echo "\n";
}

关于php - ORDER BY 在 PHP/MySQL 中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981221/

相关文章:

java - 一次将SQL脚本执行到oracle db中

PHP 登录总是返回错误

php - WordPress 网站被黑,生成巨大的 error_log 文件

php - 服务器性能问题 - 哪个查询将是更好的解决方案

sql - 在SQL中,什么情况下我们要对表中的一个字段进行索引,或者同时对表中的2个字段进行索引?

javascript - 模块名称 "mysql"尚未加载上下文 : _. 使用 require([]) http ://requirejs. org/docs/errors.html#notloaded

python - 使用pythons oursql在mysql数据库中存储数据就是爬取。为什么?

SQL从字符串中删除字符

mysql - 如何在 MySQL 中使用子查询呈现两个表的混合结果?

PHP 奇怪的语法 - 它叫什么?