#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. Позвольте мне попробовать это и сообщить вам.