0

かなり単純なテーブルがあり、フィールドlastloginonはタイムスタンプであり、そこに格納されている日付は次のようになります。2013-03-17 17:12:58

過去20分間に削除されたすべてのレコードを選択するにはどうすればよいですか?

私は次のコードで試しています:

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

間違った結果のセットを生成します。これは、qyeryが15:30に実行されたイベントであり、次の場所に挿入された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);

よろしく、ゾラン

4

3 に答える 3

4

date_sub(now(), interval 20 minute)代わりに試してください(now() - interval 20 minute)

于 2013-03-18T13:39:38.213 に答える
0

It looks to me like you may have a timezone issue. It's hard to tell without knowing more about your server and client configuration.

But you might try this WHERE clause ...

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

This will compare your column numerically to the unix timestamp of twenty minutes ago.

于 2013-03-18T14:26:20.070 に答える
0

mysqlサーバーでの時間は、おそらく予想される時間とは異なります。サーバー上の時刻を見つけるには、次のクエリを使用してみてください。

select now();

これで、クエリは正しいですが、テーブルへの挿入が正しくありません。使用する代わりに

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

サイト側では、このフィールドを空のままにして、を使用します"default CURRENT_TIMESTAMP"

別の注意点として、usernameには説明のつかない先頭のスペースがあることに注意してください。

于 2013-03-18T15:22:40.523 に答える