Временной интервал PHP-резервирования

Я разрабатываю систему бронирования php на основе временного интервала на ежедневной основе. Ive настроил 4 таблицы базы данных!

  1. Bookslot (в котором хранятся все идентификаторы – id_bookslot, id_user, id_timeslot)
  2. Timeslot (хранить все время в промежутке 15 минут: 09:00, 09:15, 09:30 и т. Д.)
  3. Терапевт (хранит все данные терапевта)
  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" 

если у кого-нибудь есть решение для этой системы, пожалуйста, помогите мне, и я его очень много знаю!

Related of "Временной интервал PHP-резервирования"

 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 …