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 varchar(100), SecondName varchar(100), SurName varchar(100), ); CREATE TABLE Patients( ID int IDENTITY(1,1) not null primary key, FirstName varchar(100), SecondName varchar(100), SurName varchar(100), ); CREATE TABLE Jobs( ID int IDENTITY(1,1) not null primary key, JobName varchar(100), ); CREATE TABLE Wishes( ID int IDENTITY(1,1) not null primary key, linkJobID int, linkPatientID int, WishText varchar(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 ('Терапевт'), ('Хирург'), ('Окулист'), ('Ортопед'), ('Дерматолог'), ('Логопед'), ('Лор'); INSERT INTO Doctors (SecondName, FirstName, SurName, linkJobID) VALUES ('Иванов','Иван','Иванович', 1), ('Петров','Иван','Кириллович', 2), ('Филимонов','Андрей','Кириллович', 7), ('Андреев','Кирилл','Андреевич', 3), ('Гизатуллин','Рустам','Ильдарович', 4), ('Первов','Азат','Климович', 5); INSERT INTO Patients (SecondName, FirstName, SurName) VALUES ('Рогова', 'Нина', 'Владимировна'), ('Гареев', 'Артур', 'Салаватович'), ('Чанышев', 'Константин', 'Заурович'), ('Иванова', 'Маргарита', 'Васильевна'), ('Хасипов', 'Николай', 'Николаевич'), ('Андропов', 'Руслан', 'Ильфирович'), ('Боброва', 'Надежда', 'Игнатьевна'); INSERT INTO Wishes (linkJobID, linkPatientID, WishText) VALUES (1, 1, 'Хотелось бы, чтобы терапевт использовал одноразовые палочки для осмотра'), (2, 2, 'Хотелось бы хирург как можно мягче осматривал больное место, без сильных нажимов'), (7, 3, 'Вот бы был способ проверить слизистую носа без использования ужасной длинной палочки'); -- INSERT INTO Appointments (linkDoctorID, linkPatientID, dtVisitTime) -- VALUES -- (1, 1, CAST('2023-09-07 08:00:00' as datetime)), -- (2, 2, CAST('2023-09-07 08:30:00' as datetime)), -- (3, 3, CAST('2023-09-08 15:00:00' as datetime)); -- SELECT -- Doc.FirstName + ' ' + Doc.Surname + ' ' + Doc.SecondName AS DoctorName, -- Job.JobName AS DoctorSpeciality, -- Pat.FirstName + ' ' + Pat.Surname + ' ' + Pat.SecondName AS PatientName, -- App.dtVisitTime AS VisitTime, -- Wsh.WishText AS PatientWish -- FROM -- Appointments App -- JOIN -- Doctors Doc ON App.linkDoctorID = Doc.DoctorID -- JOIN -- Jobs Job ON Doc.linkJobID = Job.JobID -- JOIN -- Patients Pat ON App.linkPatientID = Pat.PatientID -- LEFT JOIN -- Wishes Wsh ON Pat.PatientID = Wsh.linkPatientID AND Doc.linkJobID = Wsh.linkJobID
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') ]; //Вставка назначений в БД проходом по массиву array_walk($appointmentsArray, 'insertAppointments', $db); $db::statement('ALTER TABLE [Doctors] ALTER COLUMN [FirstName] VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC_UTF8;'); //Получение назначений в удобном для отображения виде $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, Wishes.WishText")) ->get(); print_r($appointmentRows);
Show:  
Copy Clear