如何获得接下来的12个未来日期

时间:2012-05-09 08:33:32

标签: mysql date

我有一些代码可以告诉您何时没有联系到联系人,并在日历上突出显示该日期。即如果您上次与该人联系过,那么突出显示的日期将在下个月的页面上显示一个月。

我想做的是为每个月做一到一年。因此,在前面的例子中,如果我在突出显示的一天之后移动了一个月,那么它将“未联系两个月”,三个月,四个月,因此第四个直到12个月。

以下是我现在用于“未联系一个月”查询的内容:

SELECT DATE_FORMAT(DATE(DATE_ADD(date, INTERVAL 1 MONTH)), '%Y-%c-%d') AS overDate
    FROM contact_method_history
WHERE DATE(DATE_ADD(date, INTERVAL 1 MONTH)) = '$SQLDate'
AND entityRef = ".$this->entityId."
ORDER BY date DESC
LIMIT 1

$ this-> entityId可能是153或9045,它只是对联系人的引用。

$ SQLDate采用'2012-05-09'的形式。

1 个答案:

答案 0 :(得分:0)

我不同意评论:如果你进行循环,那么你将运行12个查询而不是1个,这会降低性能。另一方面,“一体化”查询的陈述并非易事:

SELECT date
, i.m
, DATE_FORMAT(DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH)), '%Y-%c-%d') AS overDate
FROM contact_method_history AS cmh
, (
    SELECT 1 as m
    UNION ALL SELECT 2 as m
    UNION ALL SELECT 3 as m
    UNION ALL SELECT 4 as m
    UNION ALL SELECT 5 as m
    UNION ALL SELECT 6 as m
    UNION ALL SELECT 7 as m
    UNION ALL SELECT 8 as m
    UNION ALL SELECT 9 as m
    UNION ALL SELECT 10 as m
    UNION ALL SELECT 11 as m
    UNION ALL SELECT 12 as m
) AS i
WHERE ( DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH)) = '$SQLDate' )
AND (entityRef = ".$this->entityId.")
GROUP BY i.m, DATE(DATE_ADD(cmh.date, INTERVAL i.m MONTH))