2016-10-01 4 views
1

В моей базе данных dates У меня есть таблица дат, для которой необходимо выполнить два последующих действия, один через 30 дней, один через 60 дней. Мне нужно создать страницу, которая использует запрос MySQL, чтобы вытащить все даты из таблицы dates, которые имеют значение 30dayNo (что я могу сделать). Теперь сложная часть, мне нужно, чтобы она выводила только даты, соответствующие этим критериям, и составляет 30 дней с текущей даты.Количество PHP между датой и сегодняшним днем ​​

Например: 4 августа & 6 имеет 30day значения No, 5 августа имеет 30day значение Yes. Сегодняшняя дата - 4 сентября. За 30 дней до этого было бы 5 августа.

Мне нужен запрос только для показа 4 августа, так как прошло не прошло 30 дней с 6 августа, а 5 августа ,

Я не уверен, какую функцию использовать для этого подсчета. Я ценю вашу помощь

EDIT:

Date - 30day Value 
July 1 - Yes 
July 5 - No 
August 1 - No 
August 5 - No 
August 6 - Yes 

Сегодняшняя дата является 2.

таблица не будет отображаться 5 июля и 1 августа, так как их значения 30day являются Нет, и они более сентября чем 30 дней с сегодняшнего дня.

+0

http://www.w3schools.com/sql/func_datediff.asp. это поможет вам напрямую получить данные только по запросу –

+1

Примеры данных и желаемые результаты действительно помогут объяснить, что вы хотите сделать. –

+0

@GordonLinoff У меня есть пример на моем посту в отношении даты в августе. Я хотел бы, чтобы таблица экспортировала любые даты за последние 30 дней, которые имеют 30-дневную стоимость № –

ответ

1

Функция MySQL DATEDIFF позволяет вычесть 2 даты в запросе.

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff

DATEDIFF() возвращает expr1 - expr2 выражается как значение в днях от одного дня к другому. expr1 и expr2 - это выражения даты или даты и времени. В расчетах используются только части даты.

Например:

SELECT some_id, date_column 
FROM date_table 
WHERE DATEDIFF(CURDATE(), date_column) = 30 

Вы также можете выбрать как 30 и 60 дней, как это, а также иметь дату среза 60 дней, так что это не поиск всю таблицу:

SELECT some_id, date_column 
FROM date_table 
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY) 
AND DATEDIFF(CURDATE(), date_column) IN (30, 60) 

И поскольку я делаю некоторые предположения с моим пониманием того, что вы просите, вы также можете сделать это, чтобы вернуть результаты в виде «Да» или «Нет» в вашем результирующем наборе:

SELECT some_id, date_column, 
CASE DATEDIFF(CURDATE(), date_column) 
    WHEN 60 THEN 'Yes' 
    WHEN 30 THEN 'Yes' 
    ELSE 'No' 
END CASE AS is_3060_day 
FROM date_table 
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY) 

В качестве альтернативы, если вы хотите сделать это на стороне PHP, вы можете использовать date_diff функцию РНР:

http://php.net/manual/en/function.date-diff.php

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a') 
{ 
    $datetime1 = date_create($date_1); 
    $datetime2 = date_create($date_2); 

    $interval = date_diff($datetime1, $datetime2); 

    return $interval->format($differenceFormat); 

} 
$result = dateDifference($date1, $date2) 
if ($result==30 || $result==60) { 
    // Do something 
} 
+1

Руки вниз один из лучших и наиболее подробных ответов, которые я когда-либо видел. Спасибо, Клейтон, так много! –

2

Вы должны использовать DATEDIFF функцию:

SELECT .... 
FROM your_table 
WHERE DATEDIFF(CURDATE(), event_date) = 30 

Где event_date является примером вашей даты столбца.

+0

Спасибо за ваш ответ! –

1

вы можете получить как даты и использовать функцию PHP

$prevdate = date_create("2013-03-15"); 
$currdate = date_create("2013-12-12"); 
$diff = date_diff($prevdate,$currdate); 
echo $diff->format("%R%a days"); 

Выход

272 days 
Смежные вопросы