我想我在标题中总结得很好。我想选择一个特定时间到另一个特定时间的在线用户。我的桌子看起来像这样:
CREATE TABLE online ( id bigint(20) NOT NULL auto_increment, `username` varchar (16) NOT NULL, `ip` varchar(39) NOT NULL default '', `time` datetime NOT NULL default '0000-00-00 00:00:00' , PRIMARY KEY (id) );
我想要一个查询,该查询返回username在线的last 15 minutes。
username
last 15 minutes
并查询已经在线的用户last 60 minutes, but not the last 15 minutes。因此查询不会返回相同的值。我不知道该怎么办。
last 60 minutes, but not the last 15 minutes
对于您的第一个查询:
SELECT username FROM online WHERE time > NOW() - INTERVAL 15 MINUTE
第二点:
SELECT username FROM online WHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE
这两个查询均假设每个用户在联机表中仅出现一次(如果确实如此,则应添加UNIQUE约束以强制执行此操作)。
如果用户名可以在表中多次出现,则只需要在SELECT之后为第一个查询添加DISTINCT,但是对于第二个查询,您需要使用略有不同的方法:
SELECT DISTINCT username FROM online WHERE time > NOW() - INTERVAL 60 MINUTE AND NOT EXISTS ( SELECT * FROM online WHERE time > NOW() - INTERVAL 15 MINUTE )