У меня есть 3 разные таблицы MySQL со следующими атрибутами:
матрас: id, healthSystemName, здание, этаж, комната, кровать, idUSer
Patient: ID, idMattress, имя, фамилия
Карта давления: ID, idMattress, PressureData, присутствие, creation_at, updated_at
Я хочу получить списоквсе матрасы, существующие со следующей информацией, чтобы показать его на панели инструментов моего приложения, разработанного в Laravel (PHP):
- Он должен быть соединен с таблицей пациентов (mattress.id = Patient.idMattress).
- Он должен быть объединен с таблицей давления (displaymap.idMattress = mattress.id)
- Мне нужна только информация о последней карте давления (упорядочено по потомку Pressure.created_at, предел 1)
- Возможно, матрас не имеет назначенного пациента и / или карты давления.В этом случае должна быть строка со значениями, относящимися к пациенту, и карта давления, равная нулю
- В SELECT должно быть: mattress.id, имя-пациента, имя-пациента, имя-пациента, 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]);
}
Как получитьэти данные?
Я добавляю изображение того, как эта информация должна отображаться для лучшего понимания, где у меня уже есть зеленые данные, и мне нужно добавить желтые:
ОБНОВЛЕНИЕ: После того, как я немного покопался, я нашел способ добавить самую последнюю карту давления на матрас, но теперь я не получаю пустой матрас.Также я должен упомянуть, что в файле 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]);