SELECT DISTINCT - GROUP
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:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql = "SELECT DISTINCT `session`, `member`, `id` FROM `statistics` WHERE (`date` >= '" . $date . "') AND (`time` >= '" . $time . "') GROUP BY `session`, `member` ORDER BY `id` DESC;";
?>
$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
Code (php)
1
2
3
4
5
2
3
4
5
<?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;";
?>
$sql = "SELECT `session`, `member`, MAX(`id`) AS `max_id` FROM `statistics` WHERE (`date` >= '" . $date . "') AND (`time` >= '" . $time . "') GROUP BY `session` ORDER BY `id` DESC;";
?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
Pholeron waarom maak je niet gebruik van een DATETIME veld?