我得到了以下查询:
$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个月内开始。所以我猜“中间解决方案”不适合这里?
我正在试着想办法把它做好,但现在我会感谢任何人的帮助。
如果有人能帮助我,我会很高兴和感激的。
诚挚的问候,
亚历克斯
发布于 2012-01-12 01:27:08
使用DATEDIFF
SELECT DATEDIFF(month, '2000-02-10','2000-01-10');自02-10年度以来的收益率1是01-10年度后的一个月
可以将更改为,以获取天数。
参考:http://www.1keydata.com/sql/sql-datediff.html
UPDATE:在MSQL中你可以使用DATEDIFF,因为它可以作为参数传递给MySQL,而DATEDIFF版本只返回天。在MySQL中,您可以使用PERIOD_DIFF。虽然不知道每个月的确切天数。
PERIOD_DIFF(P1,P2)
“返回期间P1和P2之间的月数。P1和P2的格式应为YYMM或YYYYMM。请注意,期间参数P1和P2不是日期值。”
mysql> SELECT PERIOD_DIFF(200802,200703);
-> 11如果您需要知道到底有多少个月不同,您需要进行多步计算。要找出一个月中的天数,您可以使用LAST_DAY函数,并从结果中提取day部分,并将其用作进一步计算的基础。
LAST_DAY('2003-02-05');
-> '2003-02-28'https://stackoverflow.com/questions/8823632
复制相似问题