Ik heb een tabel die statistieken opslaan. Elke HIT wordt geregistreerd in de tabel 'statistics'. In de statistieken wordt o.a. de huidige SESSION_ID, een datum, tijd, en het 'member_id' opgeslagen. Tevens bevat de tabel de kolom ID die a-la auto_increment zichzelf steeds van een waarde voorziet.

Het 'member_id' heeft de waarde 0 als de bezoeker NIET is ingelogd, of bevat het het 'member_id' uit de tabel 'members' indien de bezoeker wel is ingelogd.

Om te bekijken wie er 'actief' zijn op de website, wil ik de statistieken tabel gebruiken voor het uitlezen van actieve sessies in de laatste X minuten.

Ik wil daarom een query bouwen die elke geregistreerde SESSION_ID in de laatste X minuten opvraagt. Ik wil per sessie_id maar 1 record terug (distinct).

Omdat ik wil weten of de bezoeker (niet meer) ingelogd is het noodzakelijk dat ik de record met het hoogste ID terug krijg. Dit laatste (dat ik dus de meest recente statistiek krijg bij een bepaald SESSION_ID) krijg ik niet voor elkaar.

De query die ik nu run:

<?php

$sql = "SELECT DISTINCT `session`, `member`, `id` FROM `statistics` WHERE (`date` >= '" . $date . "') AND (`time` >= '" . $time . "') GROUP BY `session`, `member` ORDER BY `id` DESC;";

?>

Om een of andere reden krijg ik niet het record met het hoogste ID, maar lijk ik een willekeurig record (uit de laatste x minuten) terug te krijgen. Ik krijg wel netjes 1 record per SESSION_ID.

Ik heb ff geprobeerd m.b.v. 'HAVING MAX(`id`)' de query aan te passen maar toen bleven de recordsets continue leeg.

Wie kan me helpen de passende query te schrijven? :P
Hmm.. na wat onlogische dingen te hebben geprobeert kwam ik toch uit tot iets dat lijkt te werken :P

<?php

$sql = "SELECT `session`, `member`, MAX(`id`) AS `max_id` FROM `statistics` WHERE (`date` >= '" . $date . "') AND (`time` >= '" . $time . "') GROUP BY `session` ORDER BY `id` DESC;";

?>
Pholeron waarom maak je niet gebruik van een DATETIME veld?

Reageren