Как отфильтровать день и дату из базы данных с помощью PHP и MySQL

#php #mysql

#php #mysql

Вопрос:

Мне нужно извлечь день и дату из базы данных, используя PHP и MySQL. Моя таблица ниже:

db_day:

 day_id    day_name

  1        Monday

  2        Tuesday

  3        Wednsday

  4        Thursday

  5        Friday

  6        Saturday

  7        Sunday
  

Приведенная выше таблица моего дня.

db_special:

 id    restname       date_from          date_to      day_from  day_to

 1     aaa           2016-09-22        2016-09-26      1         4

 2     bbb           2016-10-19        2016-10-28      2         5

 3     ccc           2016-10-18        2016-10-25      4         7
  

Выше приведены две мои таблицы. Предположим, что у пользователя есть входные данные Tuesday , и из приведенной выше таблицы необходимо извлечь значение в диапазоне дат.Здесь, если у пользователя есть только входные данные Tuesday , сначала он должен вычислить день и дату. Если предположить, что сегодняшний день является Friday , он будет учитывать следующий Tuesday .

Здесь пользовательский ввод используется только Tuesday для того, чтобы вычислить сегодняшнюю дату e.g-2016-10-21 , а затем отфильтровать значение из приведенной выше таблицы. Ожидаемым результатом в соответствии с этим примером должна быть эта строка из таблицы:

bbb 2016-10-19 2016-10-28 2 5

Как я могу написать запрос для решения этой проблемы?

Комментарии:

1. Если пользовательский ввод — вторник, какова логика выбора из db_special? Почему, если сегодняшняя дата 2016-10-21, результат должен быть bbb 2016-10-22 2016-10-28 2 5 ?

2. @krasipenkov : Потому что смотрите day_from and day_to . Это в пределах со вторника по пятницу ` согласно db_day таблице.

3. @krasipenkov: Здесь логика заключается в том, что пользовательский ввод Tuesday . Сегодняшняя дата должна совпадать с диапазоном дат, а введенный день будет совпадать с диапазоном дней из db_special таблицы.

Ответ №1:

Вы можете попробовать с этим кодом:

 // $db is PDO instance
// $userDay is user input day

$todayDayId = date('N');
$stmt = $db->prepare('SELECT day_id FROM db_day WHERE day_name=:userDay');
$stmt->execute([':userDay' => $userDay]);
$userDayId = $stmt->fetchColumn();

if($todayDayId > $userDayId) {
    $diff = (7-$todayDayId)   $userDayId;
}
else {
    $diff = $userDayId - $todayDayId;
}

$wantedDate = date('Y-m-d', strtotime(' '.$diff.' day'));

$pdoData = [
    ':wantedDate'  => $wantedDate,
    ':wantedDate2' => $wantedDate,
];
$stmt = $db->prepare('SELECT id, restname, date_from, date_to, day_from, day_to
                      FROM db_special
                      WHERE date_from>=:wantedDate AND date_to<=:wantedDate2');
$stmt->execute($pdoData);
$result = $stmt->fetchColumn();
  

Комментарии:

1. Позвольте мне попробовать это и сообщить вам.