2

我有一些代码可以告诉您何时不会联系联系人,并在日历上突出显示当天。即,如果您最后一次联系该人是昨天,则突出显示的日期将在下个月页面上的一个月后出现。

我想做的是每个月到一年都这样做。因此,在前面的示例中,如果我在突出显示的日期之后移动了一个月,它将是“两个月内没有联系”、三个月、四个月等等,直到 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”。

4

1 回答 1

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))
于 2012-05-09T09:23:01.653 回答