laravel加入最新的pressuremap入口

j0pj023g  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(365)

我有3个不同的mysql表,具有以下属性:
床垫:id,healthsystemname,建筑物,楼层,房间,床,id用户
病人:身份证,姓名
压力Map:id,id床垫,压力数据,状态,创建时间,更新时间
我想得到一个所有床垫的列表,其中包含以下信息,以显示在我用laravel(php)开发的应用程序的 Jmeter 板上:
它应该与病人台(matt.id=patient.idmatt)连接。
它应该与pressuremap表(pressuremap.idMatt=matt.id)连接起来
我只需要最新压力图的信息(order by pressure.u at downent,limit 1)
可能是床垫没有指定患者和/或压力图。在这种情况下,应该有一行,其中与患者和pressuremap相关的值为null
所选选项包括:matt.id、patient.name、patient.lasname、preassuremap.presence、preassuremap.created\u at
现在,我通过以下功能获得了与患者连接的床垫的信息,但我需要添加pressuremap信息:

public function index(){
        $id = Auth::id();

        $mattress = DB::table("mattress")
            ->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")
            ->where('mattress.idUser', '=', $id)
            ->get();

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

如何获取这些数据?
为了更好地理解,我添加了一个如何显示这些信息的图像,其中我已经有了绿色的数据,需要添加黄色的数据:

更新:挖了一点后,我找到了一个方法,添加最新的压力图到床垫,但现在我没有得到床垫是空的。我还必须提到,您需要在config/database.php文件中将mysql属性“strict”设置为false。

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

    $mattress = DB::table('mattress')
        ->joinSub($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]);
wqlqzqxt

wqlqzqxt1#

最后,我找到了方法:

$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]);
bd1hkmkf

bd1hkmkf2#

请尝试以下代码:

$mattress = DB::table('mattress')->join('patient', 'mattress.id','=', 'patient.idMattress')
        ->where(['mattress.idUser' => $id])
        ->leftJoin('pressuremap', 'pressuremap.idMattress', '=', 'mattress.id')
        ->select("patient.id", "patient.name", "patient.surname", "mattress.id",
            "mattress.healthSystemName","mattress.building","mattress.floor","mattress.room",
            "mattress.bed", "pressuremap.pressureData", "pressuremap.presence",
            "pressuremap.created_at", "pressuremap.updated_at")
        ->orderBy('created_at', 'DESC')->first();

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

我没有在select中包括patient.medicalrecordnumber和patient.visitrecordnumber,因为您没有说过patient表中存在这些列。如果它们确实存在,您可以轻松地更改查询。

相关问题