从datetime x min ago和datetime x min ago之间的mysql表中选择
技术问答
336 人阅读
|
0 人回复
|
2023-09-14
|
我想我在标题中总结得很好。我想选择一个特定时间到另一个特定时间的在线用户。我的桌子看起来像这样:3 g! c, s: o. _" e
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- PRIMARY KEY (id));我想要一个查询,该查询回来了username在线的last 15 minutes。
( S7 a: {: u' x. ~' X; h8 G9 K, }并查询在线用户last 60 minutes,but not the last 15minutes。所以查询不会返回相同的值。我不知道该怎么办。2 R" H7 G4 c% x/ l! y- W
8 F$ o5 S* {& q6 N" b$ S! d2 m$ R
解决方案:
3 k! X& \) O$ b; l: a9 w* Q 第一次查询:. x" c8 Y- A; e0 l
SELECT usernameFROM onlineWHERE time > NOW() - INTERVAL 15 MINUTE第二点:
. L0 M9 Y2 M9 F' i# g" y+ X3 g! c0 ]( MSELECT usernameFROM onlineWHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE这两个查询都假设每个用户在联机表中只出现一次(如果是这样,则应添加UNIQUE限制强制执行此操作)。6 a% G& o4 D2 E4 j+ @( i) b
如果用户名可以在表中多次出现,只需要SELECT然后添加第一个查询DISTINCT,但对于第二次查询,您需要使用稍有不同的方法:( D5 W- U/ z- ?& {$ p0 s( f
SELECT DISTINCT usernameFROM onlineWHERE time > NOW() - INTERVAL 60 MINUTEAND NOT EXISTS( SELECT * FROM online WHERE time > NOW() - INTERVAL 15 MINUTE) |
|
|
|
|
|