PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
CREATE TABLE Doctors( ID int IDENTITY(1,1) not null primary key, FirstName nvarchar(100), SecondName nvarchar(100), SurName nvarchar(100), ); CREATE TABLE Patients( ID int IDENTITY(1,1) not null primary key, FirstName nvarchar(100), SecondName nvarchar(100), SurName nvarchar(100), ); CREATE TABLE Jobs( ID int IDENTITY(1,1) not null primary key, JobName nvarchar(100), ); CREATE TABLE Wishes( ID int IDENTITY(1,1) not null primary key, linkJobID int, linkPatientID int, WishText nvarchar(256) CONSTRAINT FK_Wish_Jobs FOREIGN KEY (linkJobID) REFERENCES Jobs(ID) , CONSTRAINT FK_Wish_Patients FOREIGN KEY (linkPatientID) REFERENCES Patients(ID) ); CREATE TABLE Appointments( ID int IDENTITY(1,1) not null primary key, linkDoctorID int, linkPatientID int, dtVisitTime datetime, CONSTRAINT FK_Appointment_Doctors FOREIGN KEY (linkDoctorID) REFERENCES Doctors(ID) , CONSTRAINT FK_Appointment_Patients FOREIGN KEY (linkPatientID) REFERENCES Patients(ID) ); ALTER TABLE Doctors ADD linkJobID int; ALTER TABLE Doctors ADD CONSTRAINT FK_Doctor_Jobs FOREIGN KEY (linkJobID) REFERENCES Jobs(ID); INSERT INTO Jobs (JobName) VALUES (N'Терапевт'), (N'Хирург'), (N'Окулист'), (N'Ортопед'), (N'Дерматолог'), (N'Логопед'), (N'Лор'); INSERT INTO Doctors (SecondName, FirstName, SurName, linkJobID) VALUES (N'Иванов',N'Иван',N'Иванович', 1), (N'Петров',N'Иван',N'Кириллович', 2), (N'Филимонов',N'Андрей',N'Кириллович', 7), (N'Андреев',N'Кирилл',N'Андреевич', 3), (N'Гизатуллин',N'Рустам',N'Ильдарович', 4), (N'Первов',N'Азат',N'Климович', 5); INSERT INTO Patients (SecondName, FirstName, SurName) VALUES (N'Рогова', N'Нина', N'Владимировна'), (N'Гареев', N'Артур', N'Салаватович'), (N'Чанышев', N'Константин', N'Заурович'), (N'Иванова', N'Маргарита', N'Васильевна'), (N'Хасипов', N'Николай', N'Николаевич'), (N'Андропов', N'Руслан', N'Ильфирович'), (N'Боброва', N'Надежда', N'Игнатьевна'); INSERT INTO Wishes (linkJobID, linkPatientID, WishText) VALUES (1, 1, N'Хотелось бы, чтобы терапевт использовал одноразовые палочки для осмотра'), (2, 2, N'Хотелось бы хирург как можно мягче осматривал больное место, без сильных нажимов'), (7, 3, N'Вот бы был способ проверить слизистую носа без использования ужасной длинной палочки');
Copy Clear
Copy Format Clear
<?php //Создание класса назначений class Appointment { public $linkDoctorID; public $linkPatientID; public $dtVisitTime; public function __construct($linkDoctorID, $linkPatientID, $dtVisitTime) { $this -> linkDoctorID = $linkDoctorID; $this -> linkPatientID = $linkPatientID; $this -> dtVisitTime = $dtVisitTime; } } //Создание callback-процедуры вставки назначения в базу данных function insertAppointments($value, $key, $db) { $db::table('Appointments')->insert(['linkDoctorID' => $value->linkDoctorID, 'linkPatientID'=> $value->linkPatientID, 'dtVisitTime' => date('Y-m-d h:i:s', strtotime($value->dtVisitTime))]); } //Получение данных из таблиц врачей и пациентов $doctorsRows = $db::table('Doctors')->get(); $patientsRows = $db::table('Patients')->get(); //Заполнение массива назначений $appointmentsArray = [ new Appointment($doctorsRows[0]->ID, $patientsRows[0]->ID, '2023-09-07 08:00:00'), new Appointment($doctorsRows[1]->ID, $patientsRows[1]->ID, '2023-09-07 08:30:00'), new Appointment($doctorsRows[2]->ID, $patientsRows[2]->ID, '2023-09-08 15:00:00') ]; //Вставка назначений в БД проходом по массиву c callback-процедурой array_walk($appointmentsArray, 'insertAppointments', $db); //Получение назначений в удобном для отображения виде полей $appointmentRows = $db::table('Appointments') ->join('Doctors','Appointments.linkDoctorID', '=', 'Doctors.ID') ->join('Jobs','Doctors.linkJobID', '=', 'Jobs.ID') ->join('Patients','Appointments.linkPatientID', '=', 'Patients.ID') ->leftjoin('Wishes', function($join) { $join->on('Patients.ID', '=', 'Wishes.linkPatientID') ->on('Doctors.linkJobID', '=', 'Wishes.linkJobID'); }) ->select($db::raw("Doctors.FirstName + ' ' + Doctors.Surname + ' ' + Doctors.SecondName AS DoctorName, Jobs.JobName, Patients.FirstName + ' ' + Patients.Surname + ' ' + Patients.SecondName AS PatientName, Appointments.dtVisitTime, STRING_AGG(Wishes.WishText, ',') Wishlist")) ->get(); print_r($appointmentRows);
Show:  
Copy Clear