回答

收藏

从datetime x min ago和datetime x min ago之间的mysql表中选择

技术问答 技术问答 474 人阅读 | 0 人回复 | 2023-09-14

我想我在标题中总结得很好。我想选择一个特定时间到另一个特定时间的在线用户。我的桌子看起来像这样:* q/ U& \4 s' ?: t( h
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。
1 h. {! Y- F2 b6 y5 q9 m! _" O并查询在线用户last 60 minutes,but not the last 15minutes。所以查询不会返回相同的值。我不知道该怎么办。
- Q: s( ~- s' s5 b  F                                                                ( G0 s; y5 y' _3 k. {& J  o% H
    解决方案:                                                                , W  X9 r- f. i1 G& S6 D
                                                                第一次查询:
& l2 [7 X. P/ y" f$ Q. DSELECT usernameFROM onlineWHERE time > NOW() - INTERVAL 15 MINUTE第二点:
6 ^  W2 |$ W! Z4 _) A0 N& f. gSELECT usernameFROM onlineWHERE time BETWEEN NOW() - INTERVAL 60 MINUTE AND NOW() - INTERVAL 15 MINUTE这两个查询都假设每个用户在联机表中只出现一次(如果是这样,则应添加UNIQUE限制强制执行此操作)。( ^) B# \" c' x. ]1 l: P: _' R- _2 i
如果用户名可以在表中多次出现,只需要SELECT然后添加第一个查询DISTINCT,但对于第二次查询,您需要使用稍有不同的方法:
& t. X1 |1 D6 m9 L! P; N, j, C! USELECT DISTINCT usernameFROM onlineWHERE time > NOW() - INTERVAL 60 MINUTEAND NOT EXISTS(    SELECT *    FROM online    WHERE time > NOW() - INTERVAL 15 MINUTE)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则