Захват строк из MySQL, где текущая дата находится между датой начала и датой окончания (проверьте, находится ли текущая дата между датой начала и датой окончания)
Я пытаюсь выбрать из базы данных, чтобы получить "кампании", даты которых попадают в месяц. До сих пор мне удавалось собирать строки, которые начинаются или заканчиваются в текущем месяце. Что мне нужно сделать сейчас, так это выбрать строки, которые начинаются через один месяц и заканчиваются через несколько месяцев (, НАПРИМЕР: Это 3-й месяц в году, и есть "кампания", которая проходит с 1-го по 5-й месяц. другой пример Существует "кампания", которая проводится с 2012 по 2013 )
Я надеюсь, что есть какой-то способ выбрать через MySQL все строки, в которых может выполняться capaign. Если нет, я должен захватить все данные в базе данных и показать только те, которые работают в текущем месяце.
Я уже создал функцию, которая отображает все дни между каждой датой внутри массива, который называется "Диапазон дат". Я также создал еще один, который показывает, сколько дней длится кампания под названием "Время выполнения".
Выберите все (Очевидно)
$result = mysql_query("SELECT * FROM campaign");
Выберите Начиная С Этого Месяца
$result = mysql_query("SELECT * FROM campaign WHERE YEAR( START ) = YEAR( CURDATE( ) ) AND MONTH( START ) = MONTH( CURDATE( ) )");
Выберите Окончание Этого Месяца
$result = mysql_query("SELECT * FROM campaign WHERE YEAR( END ) = YEAR( CURDATE( ) ) AND MONTH( END ) = MONTH( CURDATE( ) ) LIMIT 0 , 30");
Пример кода
while($row = mysql_fetch_array($result))
{
$dateArray = dateRange($row['start'], $row['end']);
echo "<h3>" . $row['campname'] . "</h3> Start " . $row['start'] . "<br /> End " . $row['end'];
echo runTime($row['start'], $row['end']);
print_r($dateArray);
}
Что касается дат, база данных MySQL содержит только дату начала и дату окончания кампании.
1 answers
Чтобы обнаружить совпадение даты/времени, вы можете сделать что-то вроде этого:
//range of dates to get overlap. means if any row in the database has
//a day in its start/end range that falls between these days
$startDate = '2012-06-01';
$endDate = '2012-06-30';
$sql = "SELECT *
FROM campaign
WHERE
`start` < '$endDate'
AND `end` > '$startDate'";
, Который найдет любую строку из кампании, у которой есть любой день, который находится между датой начала и датой окончания. Это также работает для всех случаев кампании...:
- начинается до даты начала $ и заканчивается до даты окончания $ (дата окончания между диапазонами дат)
- начинается после даты начала $ и заканчивается до даты окончания $ (как начало, так и конец между диапазоном дат)
- начинается до даты начала $ и заканчивается после даты окончания $ (диапазон дат начала и окончания)
- начинается после даты начала и заканчивается после даты окончания (дата начала между диапазонами дат)
Кроме того, этот запрос в его нынешнем виде имеет $StartDate и $EndDate как эксклюзивные. Это означает, что если что-то начнется 31 мая (на основе приведенных выше дат примера) и закончится 1 июня, это не будет включено. Если вы хотите, чтобы даты были включительными, вы можете изменить >
и <
на >=
и <=
, чтобы включить дату начала и окончания.