Как выбрать только доступное время и дату для системы бронирования на прием к врачу в PHP - PullRequest
0 голосов
/ 25 января 2019

У меня есть только одна таблица с именем meeting_master в MySQL, в которой я храню дату и время бронирования, введенные пациентом.Время назначения является фиксированным, означает, что пациент может записываться на прием каждые 10 минут. Это означает, что если один пациент записался на прием в 10:00 утра, то другой может записаться в 10:10 утра и так далее.Теперь, если встреча записывается в 10:00 утра, и когда другой пациент пытается записаться на прием, параметр даты и времени 10:00 AM не должен отображаться для другого пациента в теге выбора формы.

Моя таблица выглядит следующим образом:

name   lastname age gender   email            phone_no   app_date    app_time   
ramesh  ahir    30  Male    rames@gmail.com   9824758745 2019-01-18  10:20:00   
jitesh  thacker 35  Male    jitesh@gmail.com  9824758745 2019-01-21  10:30:00

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Рассмотрим следующий, очень упрощенный пример:

DROP TABLE IF EXISTS slots;

CREATE TABLE slots
(id SERIAL PRIMARY KEY,slot VARCHAR(12) NOT NULL UNIQUE);;

INSERT INTO slots VALUES
(1,'Slot 1'),
(2,'Slot 2'),
(3,'Slot 3'),
(4,'Slot 4'),
(5,'Slot 5');

DROP TABLE IF EXISTS bookings;

CREATE TABLE bookings
(booking_id SERIAL PRIMARY KEY
,user_id INT  NOT NULL
,slot_id INT NOT NULL UNIQUE
);

INSERT INTO bookings VALUES
(1,101,3);

Чтобы показать доступные слоты, мы можем сделать что-то вроде этого ...

SELECT s.* 
  FROM slots s 
  LEFT 
  JOIN bookings b 
    ON b.slot_id = s.id 
 WHERE b.booking_id IS NULL;
+----+--------+
| id | slot   |
+----+--------+
|  1 | Slot 1 |
|  2 | Slot 2 |
|  4 | Slot 4 |
|  5 | Slot 5 |
+----+--------+

... или это ...

SELECT s.*
     , CASE WHEN b.booking_id IS NULL THEN 'yes' ELSE 'no' END available 
  FROM slots s 
  LEFT 
  JOIN bookings b 
    ON b.slot_id = s.id;
+----+--------+-----------+
| id | slot   | available |
+----+--------+-----------+
|  1 | Slot 1 | yes       |
|  2 | Slot 2 | yes       |
|  3 | Slot 3 | no        |
|  4 | Slot 4 | yes       |
|  5 | Slot 5 | yes       |
+----+--------+-----------+

Чтобы убедиться, что два пользователя не могут забронировать один и тот же слот одновременно, мы можем сделать что-то вроде этого ...

INSERT INTO bookings (user_id,slot_id) 
SELECT 102,1 
  FROM (SELECT 1) x 
  LEFT 
  JOIN bookings y 
    ON y.slot_id = 1 
 WHERE y.booking_id IS NULL;

SELECT * FROM bookings;
+------------+---------+---------+
| booking_id | user_id | slot_id |
+------------+---------+---------+
|          1 |     101 |       3 |
|          2 |     102 |       1 |
+------------+---------+---------+

..., что предотвращает бронирование другого пользователятот же слот ...

INSERT INTO bookings (user_id,slot_id) 
SELECT 103,1 
  FROM (SELECT 1) x 
  LEFT 
  JOIN bookings y 
    ON y.slot_id = 1 
 WHERE y.booking_id IS NULL;

SELECT * FROM bookings;
+------------+---------+---------+
| booking_id | user_id | slot_id |
+------------+---------+---------+
|          1 |     101 |       3 |
|          2 |     102 |       1 |
+------------+---------+---------+

Все остальное может быть обработано в коде вашего приложения (PHP).

0 голосов
/ 25 января 2019
  1. используйте запрос ниже, чтобы получить время последнего визита

    выберите макс. (App_time) из встречи с мастером;

  2. Сохраните это время в переменной PHP $ date1 (или любое имя)

  3. Сохранить новое время встречи как переменную $ date2

  4. получить разницу между двумя переменными

  5. Используйте условие if, чтобы предотвратить назначение, если разница во времени составляет менее 10 минут

...