You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中SQL内连接查询帖子时按updated_at排序执行失败如何解决

问题分析
  • 核心语法错误:你将独立的SELECT查询语句直接作为表名拼接进主查询,既没有用括号包裹子查询,也没有为子查询设置别名,SQL解析器无法识别该结构,直接抛出异常
  • 逻辑冗余:不需要先对microposts表单独排序再做关联,内连接完成后直接对结果集排序,完全能实现按帖子更新时间倒序的需求,执行效率更高
最优修改方案

直接在原有可运行的SQL语句末尾添加排序规则即可,修改后完整代码如下:

$query  = "SELECT * FROM users INNER JOIN microposts ON users.id = microposts.user_id ORDER BY microposts.updated_at DESC";
$result = mysqli_query($db, $query) or trigger_error("Query Failed! SQL: $query - Error: ".mysqli_error($db), E_USER_ERROR);
$n = mysqli_num_rows($result);
for ( $i = 0; $i < $n; $i++){
    $posts[$i] = mysqli_fetch_assoc($result);
}
子查询写法(仅做参考,不推荐)

如果你确实需要先排序再关联的逻辑,正确的子查询写法需要用括号包裹查询语句并设置别名,修改后代码如下:

$ordered  = "(SELECT * FROM microposts ORDER BY updated_at DESC) AS m";
$query =  "SELECT * FROM $ordered INNER JOIN users ON users.id = m.user_id";
$result = mysqli_query($db, $query) or trigger_error("Query Failed! SQL: $query - Error: ".mysqli_error($db), E_USER_ERROR);
$n = mysqli_num_rows($result);
for ( $i = 0; $i < $n; $i++){
    $posts[$i] = mysqli_fetch_assoc($result);
}

内容的提问来源于stack exchange,提问作者Dadinho2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:27:02