【发布时间】:2020-03-05 19:04:32
【问题描述】:
如何通过 unixstamp 获取过去 24 小时内不超过 900 秒的行?谢谢
CREATE TABLE `users` (
`id` int(10) UNSIGNED NOT NULL, // User ID
`regdate` int(10) UNSIGNED NOT NULL DEFAULT '0', // Registration date in UNIX timestamp
`lastactive` int(10) UNSIGNED NOT NULL DEFAULT '0', // Last active date in UNIX timestamp
`lastvisit` int(10) UNSIGNED NOT NULL DEFAULT '0', // Last visit date in UNIX timestamp
`lastpost` int(10) UNSIGNED NOT NULL DEFAULT '0' // Last post date in UNIX timestamp
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `users` (`id`, `regdate`, `lastactive`, `lastvisit`, `lastpost`) VALUES (13, 1569915390, 1583430726, 1583425902, 1583378778);
/*
* regdate = 1569915390 = Tuesday, October 1, 2019 7:36:30 AM
* lastactive= 1583430726 = Thursday, March 5, 2020 5:52:06 PM
* lastvisit = 1583425902 = Thursday, March 5, 2020 4:31:42 PM
* lastpost = 1583378778 = Thursday, March 5, 2020 3:26:18 AM
*
* 1. On connection and other activity, the lastactive is updated with time ()
*
* 2. If the session cookie is older than 900 seconds then lastvisit is updated from lastactive
*
* 3. When disconnected, lastvisit is updated from lastactive
*/
这是我现在的查询:
SELECT id
FROM users
WHERE lastvisit > (NOW() - INTERVAL 24 HOUR) AND (NOW() - lastactive < 900)
编辑: 我想我是在@tadman 的帮助下找到的
SELECT *
FROM users
WHERE lastvisit < (NOW() - INTERVAL 24 HOUR) AND lastactive < (NOW() - INTERVAL 900 SECOND)
【问题讨论】:
-
MySQL 确实倾向于使用
DATETIME记录而不是 UNIX 时间戳类型值。使用 InnoDB 代替老旧的 MyISAM 引擎也是一个好主意。您还需要使用默认的INT(INT(11)) 而不是一些古怪和任意的INT(10)值。 -
给定示例行,您将如何计算 900 秒的值?不清楚您比较的是哪个时间值。
-
@tadman 900秒是一个固定的限制值,比较字段是lastvisit。
-
仍然不太清楚它应该代表什么。你说的是
WHERE lastvisit > (NOW() - INTERVAL 900 SECOND)吗? -
@tadman 完成了????