我有以下查询:
$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
)或最后一个帐单(b。date
)是在1个月前创建的。
问题还在于,如果优惠券尚未开始,我不想创建任何账单。这是可能的,因为我创建的优惠券将在3个月内开始。所以我猜“解决之间”并不适合这里?
我正在努力弄清楚这是否正确,但现在我会感激任何帮助。
如果有人可以帮助我,我会很高兴和感激。
最诚挚的问候,
亚历
答案 0 :(得分:0)
使用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'