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

如何根据特定id_pasien查询对应最新created_at的id_start_odon?

解决查询特定患者最新记录的id_start_odon问题

我来帮你排查下问题,顺便给出几个靠谱的解决方案~

首先看你写的SQL,这里有两个明显的错误:

  • 子查询里的s2*是语法错误,正确的写法要么是s2.*要么指定具体字段,但这里其实不需要选字段,只需要聚合值;
  • 子查询里直接把MAX(s2.created_at)放在WHERE条件里是不对的——聚合函数不能直接用在WHERE子句中,而且你的子查询逻辑绕了弯路,其实只需要拿到该患者的最大created_at值就行。

接下来给你几种可行的正确写法:

方案一:先获取最大创建时间再匹配

这是最直观的写法,先通过子查询拿到指定id_pasien对应的最大created_at,再在外层查询中匹配这个时间和患者ID:

public function get_latest($id_pasien){
    $query = "SELECT s1.id_start_odon 
              FROM start_odon s1 
              WHERE s1.id_pasien = $id_pasien 
              AND s1.created_at = (SELECT MAX(s2.created_at) 
                                  FROM start_odon s2 
                                  WHERE s2.id_pasien = $id_pasien)";
    $res = $this->db->query($query);
    // 根据你的框架返回结果,比如CodeIgniter中取单行的id_start_odon
    return $res->row()->id_start_odon;
}

⚠️ 注意:如果created_at是精确到时分秒的时间戳,这个方法完全没问题;但如果同一天有多个同患者的记录,会返回所有当天的id_start_odon。要是你只需要绝对最新的那一条(哪怕同一秒有多条),可以看下面的方案二。

方案二:排序后取第一条

通过ORDER BY按created_at降序排序,再用LIMIT 1只取第一条记录。这样即使同一时间有多个记录,也能拿到最新的那条(通常数据库会默认按主键降序排序,也就是最新插入的那条):

public function get_latest($id_pasien){
    $query = "SELECT id_start_odon 
              FROM start_odon 
              WHERE id_pasien = $id_pasien 
              ORDER BY created_at DESC, id_start_odon DESC 
              LIMIT 1";
    $res = $this->db->query($query);
    return $res->row()->id_start_odon;
}

这个写法更简洁,而且如果给id_pasien和created_at建了联合索引,查询性能会非常好。

重要提醒:避免SQL注入

你直接把$id_pasien拼进SQL语句里是有SQL注入风险的!如果用的是CodeIgniter框架,强烈建议用参数绑定来规避这个问题,写法如下:

public function get_latest($id_pasien){
    $query = "SELECT id_start_odon 
              FROM start_odon 
              WHERE id_pasien = ? 
              ORDER BY created_at DESC, id_start_odon DESC 
              LIMIT 1";
    $res = $this->db->query($query, [$id_pasien]);
    return $res->row()->id_start_odon;
}

框架会自动帮你处理参数转义,安全性拉满~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:30:43