Как проверить, если текущая дата и другие даты длиннее 1 месяца назад? - PullRequest
0 голосов
/ 11 января 2012

У меня следующий запрос:

$data = mysql_fetch_array(mysql_query("SELECT 
c.`id` AS cid,
p.`id` AS pid,p.`email`

FROM `coupons` AS c 
LEFT JOIN `coupons_partners` AS cp ON cp.`cid` = c.`id`
LEFT JOIN `partners` AS p ON p.`id` = cp.`pid`
LEFT JOIN `bills` AS b ON b.`pid` = p.`id`

WHERE 
( 
    CURRENT_DATE() BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
)
OR
( 
    CURRENT_DATE() NOT BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
    AND 
    CURRENT_DATE() BETWEEN b.`date` AND ADDDATE(b.`date`, INTERVAL 1 MONTH)
)
ORDER BY b.`id` DESC"));    

Это немного грязно.Я хочу сделать cronjob и создавать счета автоматически.Их следует создавать только через 1 месяц после истечения срока действия купона (c. expires равно DATETIME) или если счет LAST (b. date) был создан 1 месяц назад.Дело в том, что я не хочу создавать счета, если купон еще не начался.И это возможно, потому что я создаю купоны, которые начнутся через 3 месяца.Итак, я думаю, что «Between-Solution» здесь не подходит?

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

С наилучшими пожеланиями,

Алекс

1 Ответ

0 голосов
/ 11 января 2012

Использовать DATEDIFF

SELECT DATEDIFF(month, '2000-02-10','2000-01-10');

дает 1, поскольку 02-10 - один месяц после 01-10

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

Ссылка: http://www.1keydata.com/sql/sql-datediff.html

ОБНОВЛЕНИЕ: В MSQL вы можете использовать DATEDIFF, потому что в качестве аргумента можно передать месяц,версия MySQL возвращает только дни.В MySQL вы могли бы вместо этого использовать PERIOD_DIFF . Хотя он не знает точное количество дней в каждом месяце.

PERIOD_DIFF (P1, P2)

"Возвращает числомесяцев между периодами P1 и P2. P1 и P2 должны быть в формате YYMM или YYYYMM. Обратите внимание, что аргументы периода P1 и P2 не являются значениями даты. "

mysql> SELECT PERIOD_DIFF(200802,200703);
        -> 11

Если вам необходимо точно знать, точно лисколько месяцев вам нужно, чтобы сделать многоступенчатый расчет.Чтобы узнать количество дней в месяце, вы можете использовать функцию LAST_DAY и из результатов извлечь часть дня и использовать ее в качестве основы для дальнейших расчетов.

 LAST_DAY('2003-02-05');
        -> '2003-02-28'
...