Laravel 加入最新的 pressureMap 入口
Laravel join with latest pressureMap entrance
我有 3 个不同的 MySQL table 具有以下属性:
mattress: id, healthSystemName, building, floor, room, bed, idUSer
患者: id, idMattress, name, surname
pressuremap: id, idMattress, pressureData, presence, created_at, updated_at
我想获取包含以下信息的所有现有床垫的列表,以便将其显示在我在 Laravel (PHP) 中开发的应用程序的仪表板中:
- 它应该与患者一起table (mattress.id =
patient.idMattress).
- 它应该与压力图结合table (pressuremap.idMattress = mattress.id)
- 我只需要最新压力图的信息(按pressure.created_at后代排序,限1张)
- 可能是床垫没有为患者分配 and/or 压力图。在这种情况下,应该有一行与患者和压力图相关的值为 null
- SELECT 应该有:mattress.id、patient.name、patient.surname、preassuremap.presence、preassuremap.created_at
现在,我通过以下功能成功获取了与患者连接的床垫信息,但我需要添加压力图信息:
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]);
}
如何获取这些数据?
我添加了一张图片,说明应该如何显示这些信息以便更好地理解,我已经有了绿色数据,我需要添加黄色数据:
更新:
经过一番挖掘后,我找到了将最新的 pressureMap 添加到床垫的方法,但现在我没有得到空的床垫。
另外我必须提到,您需要在文件 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]);
试试这个代码:
$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,因为您没有说这些列存在于患者 table 中。如果它们确实存在,您可以轻松更改查询。
终于找到方法了:
$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]);
我有 3 个不同的 MySQL table 具有以下属性:
mattress: id, healthSystemName, building, floor, room, bed, idUSer
患者: id, idMattress, name, surname
pressuremap: id, idMattress, pressureData, presence, created_at, updated_at
我想获取包含以下信息的所有现有床垫的列表,以便将其显示在我在 Laravel (PHP) 中开发的应用程序的仪表板中:
- 它应该与患者一起table (mattress.id = patient.idMattress).
- 它应该与压力图结合table (pressuremap.idMattress = mattress.id)
- 我只需要最新压力图的信息(按pressure.created_at后代排序,限1张)
- 可能是床垫没有为患者分配 and/or 压力图。在这种情况下,应该有一行与患者和压力图相关的值为 null
- SELECT 应该有:mattress.id、patient.name、patient.surname、preassuremap.presence、preassuremap.created_at
现在,我通过以下功能成功获取了与患者连接的床垫信息,但我需要添加压力图信息:
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]);
}
如何获取这些数据?
我添加了一张图片,说明应该如何显示这些信息以便更好地理解,我已经有了绿色数据,我需要添加黄色数据:
更新: 经过一番挖掘后,我找到了将最新的 pressureMap 添加到床垫的方法,但现在我没有得到空的床垫。 另外我必须提到,您需要在文件 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]);
试试这个代码:
$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,因为您没有说这些列存在于患者 table 中。如果它们确实存在,您可以轻松更改查询。
终于找到方法了:
$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]);