需求
需要做一个访客统计并且要分别计算访问时间间隔, 若一分钟之内显示刚刚, 大于一分钟显示X分钟前…X小时前,X天前, X年前以此类推.
处理方式
SELECT
t1.id,
CASE
WHEN t2.secs > 946080000 THEN concat( TIMESTAMPDIFF( YEAR, time_column, NOW()) ,'年前')
WHEN t2.secs > 2592000 THEN concat( TIMESTAMPDIFF( MONTH, time_column, NOW()) ,'个月前')
WHEN t2.secs > 86400 THEN concat( TIMESTAMPDIFF( DAY, time_column, NOW()) ,'天前')
WHEN t2.secs > 3600 THEN concat(TIMESTAMPDIFF(HOUR,time_column,NOW()), '小时前')
WHEN t2.secs > 60 THEN concat(TIMESTAMPDIFF(MINUTE,time_column,NOW()), '分钟前')
ELSE concat(TIMESTAMPDIFF(SECOND,time_column,NOW()), '刚刚')
END AS "interval"
FROM
table_name t1
JOIN ( SELECT id, TIMESTAMPDIFF( SECOND, time_column, NOW() ) AS "secs" FROM table_name ) t2 ON t1.id = t2.id
table_name就是你表的名称
time_column表示你时间列
结果
以上就是解决方式了, 本来是使用单表查询, 但是发现美观性就差了很多, 不便维护. 以上并非一定最佳解决方式. 若你有更好的方法, 请踊跃回复!