2017-05-16 4 views
-2

Ich habe einige MySQL-Datenbank mit einem DATETIME-Feld, das sich jede Minute aktualisiert, während ein Benutzer über AJAX angemeldet ist. Das funktioniert perfekt. Allerdings versuche ich, eine Zählung, wie viele eingeloggte Benutzer zu bekommen sind und es funktioniert nichtPHP sagen, wie viele Benutzer angemeldet

$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; 

theoretisch sollte mir sagen, wie viele Benutzer angemeldet, da jeder Benutzer lidtm 'Feld jede Minute aktualisiert während sie angemeldet sind, also wenn die DATE_SUB-Funktion die Zeilen zählt, in denen das Lidtm-Feld> jetzt ist() - 1 Minute, sollte es mir alle Benutzer mitteilen, die innerhalb der letzten Minute von meinem Ajax aktualisiert wurden.

aber aus irgendeinem Grund gibt es immer alle Zeilen zurück.

was fehlt mir. Ich brauche eine Zählung, wie viele Zeilen das 'lidtm'-Feld innerhalb der letzten Minute ist.

+2

Aufruf 'DATE (now())' wirft es zu einem Datum und damit zu den nächsten 24 Stunden. Lassen Sie einfach das 'DATE()' -Bit fallen und übergeben Sie 'now()' von selbst. –

+1

@AlexHowansky sollten Sie das als Antwort posten. – Goose

+0

SELECT COUNT (*) FROM meine Tabelle WHERE lidtm> DATE_SUB (JETZT(), INTERVALL 1 MINUTE) –

Antwort

2

Wrapping now() mit date() wirft es zu einem Datum, das heißt ohne Zeit:

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

Wenn Sie Minuten messen wollen, müssen Sie die Zeit:

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

So gerade aus nehmen der Aufruf von date() und Verwendung:

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

aus irgendeinem seltsamen Grund funktioniert es nicht. – user3005775

+0

Zur Zeit ist ein Benutzer angemeldet, der Zeitstempel ist 2017-05-16 19:59:36, die aktuelle Zeit ist 2017-05-16 20:01:44, deutlich nach dem 1-Minuten-Zeitrahmen, seit ich den Benutzer abmelden musste – user3005775

+1

@ user3005775 Was Alex gepostet hat, sollte funktionieren, seit es bei mir funktioniert hat. Vielleicht gibt es etwas in deinem Ajax, dass du das nicht postest. Führen Sie 'date_sub (now(), interval 1 Minute);' aus innerhalb von phpmyadmin aus, um zu sehen, was zurückgegeben wird. Wenn es fehlgeschlagen ist, ist Ihre Spalte möglicherweise nicht der richtige Typ und/oder etwas anderes ist fehlgeschlagen. –

Verwandte Themen