Я разрабатываю систему бронирования php на основе временного интервала на ежедневной основе. Ive настроил 4 таблицы базы данных!
Пользователь (сохраните все детали участников)
ID_BOOKSLOT ID_USER ID_THERAPIST ID_TIMESLOT
1 10 1 1 (09:00) 2 11 2 1 (09:00) 3 12 3 2 (09:15) 4 15 3 1 (09:00)
Теперь, моя проблема в том, что она продолжает показывать повторение для временного интервала, когда я хочу повторять данные, например:
thera a thera b thera c ------------------------------------------------- 09:00 BOOKED available available 09:00 available BOOKED available 09:00 available available BOOKED 09:15 available BOOKED available
как вы можете видеть, 09:00, показывая три раза, и я хочу что-то вроде ниже
thera a thera b thera c ------------------------------------------------- 09:00 BOOKED BOOKED BOOKED 09:15 available BOOKED available
Возможно, что-то не так с присоединением к таблице, или иначе. Код для присоединения к таблице
$mysqli->query("SELECT * FROM bookslot RIGHT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot LEFT JOIN therapist ON bookslot.id_therapist = therapist.id_therapist"
если у кого-нибудь есть решение для этой системы, пожалуйста, помогите мне, и я его очень много знаю!
select id_TimeSlot , coalesce(Thera_A, 'available') as Thera_A , coalesce(Thera_B, 'available') as Thera_B , coalesce(Thera_C, 'available') as Thera_C from ( select t.id_TimeSlot , max(case b.id_Therapist when 1 then 'booked' else null end) as Thera_A , max(case b.id_Therapist when 2 then 'booked' else null end) as Thera_B , max(case b.id_Therapist when 3 then 'booked' else null end) as Thera_C from TimeSlot as t left join BookSlot as b on b.id_TimeSlot = t.id_TimeSlot left join Therapist as p on p.id_Therapist = b.id_Therapist group by t.id_TimeSlot ) as xx ;
Контрольная работа:
create table TimeSLot (id_TimeSLot integer); create table Therapist (id_Therapist integer); create table BookSlot (id_Therapist integer, id_TimeSlot integer); insert into Therapist (id_Therapist) values (1), (2), (3); insert into TimeSlot (id_TimeSlot) values (1), (2), (3), (4), (5); insert into BookSlot (id_Therapist,id_TimeSlot) values (1,1), (1,5), (2,1), (2,4), (3,1);
возвращается
id_TimeSlot Thera_A Thera_B Thera_C ---------------------------------------------- 1 booked booked booked 2 available available available 3 available available available 4 available booked available 5 booked available available
Я думаю, вам нужно GROUP BY id_timeslot, а затем проверить, какие терапевты забронированы (или нет).
Чтобы избежать сложных запросов, создайте таблицы «встречи» (id, u_id, t_id, start, stop, day) … Затем вы можете распечатывать встречи в определенный день или время, используя BETWEEN start / stop и WHERE day = someday …