2017-05-16 22 views
-2

私はAJAX経由でログインしている間毎分更新するDATETIMEフィールドを持つMYSQLデータベースをいくつか持っています。これは完全に機能します。しかし、私はそこにあり、それは理論的に、これは、各ユーザーのlidtm 'フィールドは、毎分更新するので、ログインしているユーザー数を教えなければならないPHPがログインしたユーザーの数を教えてください

$table = 'mytable'; 
$query = "SELECT * FROM $table WHERE lidtm > DATE_SUB(DATE(now()), INTERVAL 1 MINUTE)"; 
$result = mysqli_query($dbc, $query); 
$num = mysqli_num_rows($result); 
echo $num; 

が動作していない何ログインしているユーザーでのカウント数を取得しようとしています彼らがログインしている間、DATE_SUB関数がlidtmフィールドが> now() - 1分の行を数えれば、最後の1分以内に私のajaxによって更新されたすべてのユーザーを教えてくれます。

しかし何らかの理由で、常にすべての行を返します。

私は何が欠けていますか?私は、「lidtm」フィールドが最後の1分以内に何列あるかのカウントが必要です。 date()now()ラッピング

+2

'DATE(now()) 'を呼び出すと、それをキャストします日付に、したがって最も近い24時間に更新する。 'DATE()'ビットを落として、 'now()'だけを渡してください。 –

+1

@AlexHowanskyあなたは答えとして投稿する必要があります。 – Goose

+0

便宜的に、booleanログインフラグを保持しないのはなぜですか?ここで、lidtm> DATE_SUB(NOW()、INTERVAL 1 MINUTE)のSELECT COUNT(*)から –

答えて

2

は時間なし、すなわち、これまでにそれをキャスト:あなたは分を測定したい

select date(now()); 
+-------------+ 
| date(now()) | 
+-------------+ 
| 2017-05-16 | 
+------------- 

場合は、時間を必要とする:

select now(); 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2017-05-16 13:56:00 | 
+---------------------+ 

は、だから取りますdate()への呼び出し:

select date_sub(now(), interval 1 minute); 
+------------------------------------+ 
| date_sub(now(), interval 1 minute) | 
+------------------------------------+ 
| 2017-05-16 13:56:17    | 
+------------------------------------+ 
+0

それは何らかの奇妙な理由のために働いていません。 – user3005775

+0

現在ログインしている1人のユーザーのタイムスタンプは2017-05-16 19:59:36です。現在の時刻は2017-05-16 20:01:44です。これはユーザーがログアウトしてから1分の時間枠をはっきりと示しています – user3005775

+1

@それが私のために働いて以来、アレックスが投稿したものはuser3005775だったはずです。たぶんあなたのアヤックスには、あなたがこれを引き起こして投稿しなかったものがあります。 phpmyadminの中から 'date_sub(now()、interval 1分)を選択 'を実行して、それが何を返すかを確認してください。失敗した場合は、列が正しいタイプではない可能性があります。 –

関連する問題