Выберите строку, которая находится в пределах даты начала - PullRequest
1 голос
/ 08 марта 2011

Я пишу PHP-приложение, которое показывает рекламные акции за определенный период времени.

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

В моей базе данных я храню

date_from (MySQL DATE - eg 2011-03-05) //start date

и

date_to (MySQL DATE - eg 2011-03-08) //end date

Пользователь можетнастроить несколько рекламных акций, которые автоматически переключаются на следующую дату.

В приведенных выше примерах даты предложение будет отображаться 5-го, 6-го и 7-го числа.

Я предполагаю, что мне нужно что-то вроде

SELECT * FROM promotions WHERE date_from > $current_date

Но как бы я мог убедиться, что это не будет отображаться 8-го и затем (если было повышение, начинающееся 8-го)показать новый.

РЕДАКТИРОВАТЬ:

Этот SQL, предложенный Krtek, похоже, не работает:

SELECT * FROM promotions WHERE 2011-03-08 BETWEEN date_from AND date_to LIMIT 1 

Строка содержитследующие данные date_from = '2011-03-01' и date_to = '2011-03-09' пока ничего не возвращается

Спасибо

Ответы [ 5 ]

4 голосов
/ 08 марта 2011

Попробуйте что-то вроде этого:

SELECT * FROM promotions WHERE '$current_date' BETWEEN date_from AND date_to

edit: добавлены кавычки вокруг даты, она должна работать лучше вот так.

0 голосов
/ 08 марта 2011

Пожалуйста, не используйте строковую интерполяцию при построении SQL-запросов.Вы будете сожалеть об этом.

$stmt = mysqli_prepare($link, "SELECT * FROM promotions WHERE ? BETWEEN date_from AND date_to");
mysqli_stmt_bind_param($stmt, 's', $current_date);
mysqli_stmt_execute($stmt);
0 голосов
/ 08 марта 2011

Вы ищете что-то подобное?

SELECT * FROM `promotions` WHERE date_from between $date_from and $date_to

http://www.plus2net.com/sql_tutorial/between-date.php

0 голосов
/ 08 марта 2011
SELECT * FROM promotions WHERE date_from <= $current_date and date_to >= $current_date

потому что люди обычно ожидают, что он начнется в указанную дату и закончится до указанной даты включительно.

Но ответ Кртека лучше.

0 голосов
/ 08 марта 2011
SELECT * FROM promotions WHERE date_from > $current_date and date_to < $current_date ;

, если вы хотите перейти на дату на основе дня, запрос будет:

SELECT * FROM promotions WHERE DATE(date_from) > $current_date and DATE(date_to) < $current_date ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...