3

更新

我正在做一个网站的后端。该网站的意思是向访问者提供一个清晰的概览,我们正在组织什么时间和什么活动。
所以我用各种活动填满了数据库。每个活动都有日期、名称和其他一些信息。

很明显,展示过去的活动对参观者没有帮助,所以我只想让他们展示即将到来的活动。为了节省自己的大量工作,最好做 PHP/MySQL 的所有工作并只向访问者展示 2 个接下来的事件。

你能告诉我一个MySQL函数来做到这一点吗?

提前致谢,

4

3 回答 3

3

您可以使用DATEDIFFABS...

SELECT * FROM `activities` ORDER BY ABS(DATEDIFF(NOW(), `date`)) LIMIT 2

从更新的问题中,只考虑未来的活动......所以......

SELECT * FROM `activities` WHERE `date` > NOW() ORDER BY `date` LIMIT 2
于 2011-04-18T14:31:32.797 回答
3

只是一些建议:

选择当前时刻之前最近的 2 个事件和当前时刻之后最近的 2 个事件。

(SELECT *
FROM ...
WHERE `time` < NOW()
ORDER BY `time` DESC
LIMIT 2)
UNION
(SELECT *
FROM ...
WHERE `time` > NOW()
ORDER BY `time` ASC
LIMIT 2)

此时,您将在 PHP 中最多有 4 个事件。但是您只需要 2. 最接近的 2. 要找出您使用的最接近的,strtotime并检查事件的时间戳与您可以通过调用获得的当前时间戳之间的差异time()。之后,您只保留 2 个最接近的事件。

请注意,这可以直接从 MySQL 实现,但这种方式更难。


@最新更新。如果您不想了解更多信息,阅读此内容就足够了。

只需使用此查询:

SELECT *
FROM ...
WHERE `time` > NOW()
ORDER BY `time` ASC
LIMIT 2
于 2011-04-18T14:33:52.957 回答
0
$query = 'SELECT .... FROM ... WHERE `date` > '.$today.' ORDER BY `date` DESC LIMIT 2';

$today取决于您的date列类型。

于 2011-04-18T14:22:33.203 回答