更新
我正在做一个网站的后端。网站的目的是让访问者清楚地了解我们组织的活动的时间和内容
所以我用各种各样的活动填满了数据库。每个活动都有一个日期、一个名称和一些其他信息。
很明显,游客展示过去的活动对他们没有帮助,所以我只想让他们展示即将到来的活动。为了节省我自己的大量工作,最好完成PHP/MMySQL的所有工作,并只向访问者显示接下来的两个事件。
你能建议我用MySQL函数来做这件事吗?
提前感谢,
只是一些建议:
选择当前时刻之前最接近的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()
可以获得的当前时间戳之间的差异。之后,您只保留两个最接近的事件。
请注意,这可以直接从MySQL实现,但这样做更难
@最新更新。如果你不想知道更多,读一读就足够了
只需使用此查询:
SELECT *
FROM ...
WHERE `time` > NOW()
ORDER BY `time` ASC
LIMIT 2
您可以使用DATEDIFF
和ABS
。。。
SELECT * FROM `activities` ORDER BY ABS(DATEDIFF(NOW(), `date`)) LIMIT 2
根据最新的问题,只考虑未来的活动。。。所以…
SELECT * FROM `activities` WHERE `date` > NOW() ORDER BY `date` LIMIT 2
$query = 'SELECT .... FROM ... WHERE `date` > '.$today.' ORDER BY `date` DESC LIMIT 2';
$today
取决于您的date
列类型。