需要帮助来定义一个查询,我试图从3个不同的表中获取数据

bmp9r5qi  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(258)

我有以下表格:
床垫:id(pk),iduser(fk)healthsystemname,建筑物,楼层,房间,床,参考
患者:id(pk)、id床垫(fk)、id使用者(fk)、姓名、姓氏、性别、出生日期、病历号、就诊记录号、街道、城市、邮政编码、国家、最大压力耐受性
压力Map:id(pk)、id床垫(fk)、压力数据、最大压力、状态、身体位置、创建时间、更新时间
我想知道获取以下视图所需的查询:
patient.name,patient.姓氏,patient.medicalrecordnumber,patient.visitrecordnumber,matt.room,matt.id,pressuremap.pressuredata(仅由最新创建的),pressuremap.presence
如果床垫是空的,则应在该视图中显示患者和pressuremap data=null
现在,我有以下问题:

SELECT p.name
     , p.surname
     , p.medicalRecordNumber
     , p.visitRecordNumber
     , m.room
     , m.id mattressID 
  FROM mattress m
  LEFT 
  JOIN patient p
    on p.idMattress = m.id

我分组时需要床垫和病人,但我不知道如何仅用最后一个条目添加压力图数据。所以,我得到了绿色的数据,我需要知道如何添加黄色的数据。

谢谢!

cuxqih21

cuxqih211#

我找到了用laravel查询生成器解决这个问题的方法。

$latestPressureMap = DB::table('pressuremap')
        ->select('idMattress', DB::raw('MAX(created_at) as last_pressureMap_created_at'), 'presence', 'maxPressure')
        ->groupBy('idMattress');

    $mattress = DB::table('mattress')
        ->leftJoinSub($latestPressureMap, 'latest_pressureMap', function ($join) {
            $join->on('mattress.id', '=', 'latest_pressureMap.idMattress');
        })
        ->leftJoin("patient","mattress.id","=","patient.idMattress")
        ->select("patient.id", "patient.name", "patient.surname", "patient.medicalRecordNumber", "patient.visitRecordNumber", "mattress.id", "mattress.healthSystemName","mattress.building","mattress.floor","mattress.room", "mattress.bed", "patient.gender", "latest_pressureMap.presence", "latest_pressureMap.last_pressureMap_created_at","latest_pressureMap.maxPressure")
        ->where('mattress.idUser', '=', $id)
        ->get();

    return view('dashboard',['mattress' => $mattress]);

相关问题