Mysql пересечение касание

140
04 июня 2019, 23:00

Есть таблица поездок курьеров из Москвы в уездный город N.

Скрипт добавления курьера в БД

function addSchedule($post) {   
        extract($post);
        $null = null;
        $stmt = DataBase::getDb()->msqli->prepare
        ("INSERT INTO `schedule` 
        (`id`, `region`, `courier`, `date_from`, `date_to`) 
        VALUES (?, ?, ?, ?, ?)");
        $stmt->bind_param('bssss', $null, $region, $courier, $date_from, $date_to);
        if ($stmt->execute()) {
            echo 'Добавлено в расписание';
        } else {
            echo 'Ошибка БД';
        }
    }

По задумке должно быть невозможно добавить определенного курьера, который уже находится в поездке. То есть должна быть функция, проверяющая этот момент и возвращающая тру фолс, в зависимости от которого будет работать или не работать функция вставки. Как ее реализовать?

function employmentCheck($post) {
        extract($post);
        $date_from = strtotime($date_from);//дата отправки с формы
        $date_to   = strtotime($date_to);//дата прибытия в регион
        $courier // сам курьер
        if ($query_user = mysqli_query(DataBase::getDb()->msqli, 
        "SELECT date_from, date_to  FROM schedule 
        //тут должно быть какое то условие, которое заставляет функцию вернуть фолс если эти значения даты уже есть в базе у данного курьера
        {
        while ($data = mysqli_fetch_array($query_user, MYSQLI_ASSOC) ) {
        }
    }
Answer 1
SELECT count(id) AS count_id
FROM schedule
WHERE courier = "Генов Геннадий Геннадиевич" AND 
      date_from <= $date_to AND 
      date_to >= $date_from

Теперь проверяете переменную count_id и если она более нуля - значит курьер занят.

Но есть 2 момента:

  1. Не нужно делать extract($post) - это очень небезопасно (документация по extract()) - "Внимание Не используйте extract() на непроверенных данных, таких как пользовательский ввод (например, $_GET, $_FILES)."! Лучше вставлять данные как-то так: $post['region'], $post['courier'] ...
  2. В базе нужно создать доп. таблицу с именами (лучше для фамилии имени и отчества отдельные ячейки) и идентификаторами курьеров, а в таблице shedule вместо ФИО курьеров хранить их идентификаторы - этим вы заметно ускорите запрос по поиску незанятого курьера.
READ ALSO
Отловить ошибку в Laraval 5.7 и SftpAdapter

Отловить ошибку в Laraval 5.7 и SftpAdapter

Есть код для подключения по sftp:

167
Yii2::вывод изображений=)

Yii2::вывод изображений=)

Ребят здравствуйтеизучаю yii2 ,паралельно делая в нем свой проект

134
Warning: Illegal string offset &#39;code&#39;

Warning: Illegal string offset 'code'

Возникает ошибка Warning: Illegal string offset 'code'

133