从像 Stackoverflow 或 Facebook 这样的数据库中获取元组耗时的好方法是什么?当经过 < 1 分钟时显示经过的秒数,小于 1 小时时显示分钟等。这在 MySQL 中是否比在 PHP 中格式化具有更好的性能?
最佳答案
没有。这个 PHP 真的最适合 - 您可以从数据库中获取时间戳值 并(最终)将其转换为 Unix 纪元格式,如下所示:
SELECT UNIX_TIMESTAMP(`when`) FROM `posts` ORDER BY `id` DESC LIMIT 1;
然后计算差值。计算差异,尤其是将其划分为范围时,您需要 MySQL 执行一些并非真正最适合的操作。
最终,您还可以考虑将处理工作传递给用户 - 只需尝试使用 JavaScript 来根据时间戳确定差异。这样您就可以只使用 PHP 来显示数据库中的值,而无需在 PHP 端进行进一步处理。
使用 JavaScript (jQuery) 的解决方案
此解决方案将处理工作转移给用户,并允许同时不断更新时间戳。 JavaScript 可能看起来像这样:
jQuery('span[data-timestamp]').each(function(){
var el = jQuery(this);
var then = Math.floor(el.attr('data-timestamp'));
var updateTime = function(){
var now = Math.floor((new Date()) / 1000);
el.html((now - then) + ' seconds ago');
};
setInterval(updateTime, 1000);
updateTime();
});
然后每个片段看起来像这样:
<span data-timestamp="1320821800"></span>
将转换为相对时间戳并每秒更新一次(参见this jsfiddle)。如果您想使用它,只需确保 updateTime
正确地将以秒为单位的相对时间戳更改为使用不同单位(分钟、小时、天、周、月、年等...)的时间戳。
关于php - PHP 或 SQL 中耗时格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061167/