选择最近20分钟插入的记录

时间:2013-03-18 13:33:45

标签: php mysql select

我有一个相当简单的表,其中字段lastloginon是时间戳,存储在其中的日期如下所示:2013-03-17 17:12:58

如何选择过去20分钟内所有记录?

我正在尝试使用以下代码:

 SELECT * FROM who_is_online WHERE lastloginon > (now() - interval 20 minute)

产生错误的结果集,即在15:30执行qyery的事件,它显示4条插入的记录:

2013-03-18 13:13:36
2013-03-18 13:35:12
2013-03-18 14:43:42
2013-03-18 14:55:34

任何人都知道我做错了什么?

这是表格导出,只是希望有人能够发现我做错了什么:

CREATE TABLE IF NOT EXISTS `who_is_online` (
  `recid` int(11) NOT NULL auto_increment,
  `username` varchar(255) default NULL,
  `lastloginon` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `memberip` varchar(255) default NULL,
  `sessionid` varchar(255) NOT NULL,
  `active` tinyint(4) default NULL,
  PRIMARY KEY  (`recid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;

--
-- Dumping data for table `who_is_online`
--

INSERT INTO `who_is_online` (`recid`, `username`, `lastloginon`, `memberip`, `sessionid`, `active`) VALUES
(7, ' admin', '2013-03-17 14:43:43', '87.202.163.222', '7kve2idmdbd47aksab4j9hqg74', 1),
(8, ' mmitechnic', '2013-03-17 15:16:39', '5.54.84.144', 'mofgpldp2lu30enhitvak9m4t3', 1),
(9, ' theodor71', '2013-03-17 17:12:58', '85.75.243.246', '4enpk49oi7cg0blumgsd0lu0m7', 1),
(10, ' xElfiex', '2013-03-18 12:38:05', '5.55.27.203', 'tr003d6qbd71v2i5grnuako362', 1),
(11, ' admin', '2013-03-18 12:56:06', '85.74.166.110', '7kve2idmdbd47aksab4j9hqg74', 1),
(12, ' xElfiex', '2013-03-18 13:13:36', '5.55.27.203', 'tr003d6qbd71v2i5grnuako362', 1),
(13, ' admin', '2013-03-18 13:35:12', '85.74.166.110', '7kve2idmdbd47aksab4j9hqg74', 1),
(14, ' admin', '2013-03-18 14:43:42', '85.74.166.110', '7kve2idmdbd47aksab4j9hqg74', 1),
(15, ' admin', '2013-03-18 14:55:34', '85.74.166.110', '7kve2idmdbd47aksab4j9hqg74', 1),
(16, ' admin', '2013-03-18 15:32:27', '85.74.166.110', '7kve2idmdbd47aksab4j9hqg74', 1);

的问候,卓然

3 个答案:

答案 0 :(得分:4)

尝试date_sub(now(), interval 20 minute)而不是(now() - interval 20 minute)

答案 1 :(得分:0)

在我看来,您可能会遇到时区问题。如果不了解有关服务器和客户端配置的更多信息,很难说清楚。

但你可以尝试这个WHERE子句......

   lastloginon >= UNIX_TIMESTAMP() - (20  * 60)

这会将您的列数字与二十分钟前的unix时间戳进行比较。

答案 2 :(得分:0)

mysql服务器上的时间与你预期的不同。 要在服务器上查找时间,请尝试使用此查询:

select now();

现在,您的查询是正确的,但您对表的插入不正确。而不是使用

$lastlogin = date('Y-m-d H:i:s', strtotime("$lastlogin + 2 hours"));
在网站一侧

,将此字段留空并使用您的"default CURRENT_TIMESTAMP"

另外注意,请注意用户名有一个无法解释的前导空格。