Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][[PHP]Problem z skryptem :)
Forum PHP.pl > Forum > Przedszkole
xavierek
Witam mam bazę zakończonych sesji o strukturze USER_ID | SESSION_START | SESSION_END oraz bazę z rozpoczętymi sesjami USER_ID | SESSION_START

session start i end to aktualny timestemp
Maksymalny czas trwania sessji to 23:59 H

Pytanie mam takie jak najlepiej napisać skrypt który pokazuje użytkownika najdłużej online w aktualnym dniu i ile sekund spędził. Umiał bym to zrobić jeśli sesje zaczynały by się w danym dniu i kończyły w tym samym. lecz użytkownik może zalogować się o 23:00 i być do 4 po czym wejść o 6 o być do 10

Dziękuje z góry za każdą pomoc w naprowadzeniu mnie na rozwiązanie

w ten sposób pobieram zakres daty dla danego dnia

  1. $toDayStart = strtotime(date("Y-m-d 00:00:00"));
  2. $toDayEnd = strtotime(date("Y-m-d 23:59:59"));


wymyśliłem coś takiego:

  1. $x = mysql_query("SELECT user_id, session_start, session_end FROM users_sessions WHERE (session_start>='$toDayStart' OR session_end>='$toDayStart')");
  2. while($xx = mysql_fetch_array($x)) {
  3. $user_id = $xx['user_id'];
  4. $session_start = $xx['session_start'];
  5. $session_end = $xx['session_end'];
  6. if($session_start>=$toDayStart){
  7. if($toDayEnd>=$session_end){
  8. $count = $session_end-$session_start;
  9. $online[$user_id] = $count;
  10. }
  11. else{
  12. $session_end=$toDayEnd;
  13. $count = $session_end-$session_start;
  14. $online[$user_id] = $count;
  15. }
  16. }
  17. elseif($session_end>=$toDayStart){
  18. if($session_start>=$toDayStart){
  19.  
  20. $count = $session_end-$session_start;
  21. $online[$user_id] = $count;
  22. }
  23. else{
  24. $session_start=$toDayStart;
  25. $count = $session_end-$session_start;
  26. $online[$user_id] = $count;
  27. }
  28.  
  29. }
  30.  
  31. }
  32. arsort($online);
  33. echo key($online).'<br>';
  34. echo current($online).'<br><br>';


czy to dobrze policzy ilość sekund spędzonych na stronie czy może jakiś logiczny błąd zrobiłem ?, dodanie z rozpoczętej sesji to pikuś wiec nawet nie pisze na razie.
CuteOne
  1.  
  2. $x = mysql_query("SELECT user_id, session_start, session_end FROM users_sessions WHERE (session_start>=$toDayStart OR session_end>=$toDayStart)");
  3. while($xx = mysql_fetch_array($x)) {
  4. $user_id = $xx['user_id'];
  5. $session_start = $xx['session_start'];
  6. $session_end = $xx['session_end'];
  7.  
  8. echo date("H:i:s", ( $session_end - $session_start ));
  9. }
  10.  


robi to co Twój kod tyle, że zajmuje mniej miejsca wink.gif
xavierek
jest krótszy ale co się stanie w twoim kodzie jeżeli ktoś będzie online od 23 poprzedniego dnia ?
CuteOne
Sprawdzasz różnicę w sekundach.. nie ma najmniejszego znaczenia czy start = 10.20.2001 czy 01.01.1980 smile.gif

najlepiej zamiast pytań samemu sprawdzić jak to działa - dodatkowo polecam zapoznać się z manualem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.