Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Śledzenie zalogowanych
voytass
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 15.04.2002
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


czesc

robie sledzenie zalogowanych uzytkownikow.
zrobilem tabele do skladowanua danych ze sledzenia, sklada sie ona z pol:
1. identyfikator sesji [sid]
2. identyfikator uzytkownika [uzkid]
3. IP uzytkownika [ip]
4. data [data]
5. strona odwiedzana przez uzytkowniika [str]

i chcialbym wysweitlac wszystkich uzytkonikow, ktorzy byli 'czynni' przez ostatnie 5 min.

mam wiec zapytanie:

  1. SELECT uzkid, DATA, ip, sid
  2. FROM track WHERE DATA > NOW() - INTERVAL 5 MINUTE GROUP BY uzkid ORDER BY DATA DESC LIMIT 0 ,$ile


no i nie otrzymuje tego co chce, poniewaz:
1. wiadomo, ze jeden uzytkownik bedzie mial duzo rekordow w tej tabeli wiec dlatego group ale chce by wybieral taki wiersz z danym ip, uzkid uzytkownika dla ktorego data jest najwyzsza (teraz niestety tak nie jest - tak jaby nie dzialalo ORDER BY data DESC) pojawia sie najnizsza data.
2. czy w ogole dobrze sie do tego zabralem - czy jest jakies lepsze rozwiazanie koncepcji sledzenia zuytkownika
3. co zrobic z tymi rekordami , ktore sa starsze od NOW() - INTERVAL 5 MINUTE? chcialbym je jakos skasowac? musze np. w crona dorzucicc odpowiednie skrypty?

pozdrawiam,

Ten post edytował voytass 17.07.2005, 10:02:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
popo
post
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 15.07.2005

Ostrzeżenie: (0%)
-----


Nie jestem pewien czy dobrze mi sie kojarzy ale sprobuj dac order by DATA asc
Prosciej jednakrze byloby modyfikowac rekord istniejacego juz w bazie usera
np. najpierw szukasz czy masz dane o tym userze czyli robisz selecta po username
  1. SELECT count(*)
  2. FROM track WHERE uzkid = %uzkid AND sid = %sid AND ip = %ip

jesli bedzie wieksze od zera to modyfikujesz rekord ktory zwrocilo czyli update przy identycznych warunkach w klauzuli where jesli zwroci 0 dodajesz nowy.
Co do kasowania rekordow to mozna to z poziomu php zrobic
  1. DELETE
  2. FROM `track` WHERE DATA < NOW() - INTERVAL 5 MINUTE

Wykonujesz takie zapytanie na poczatku skryptu wyswietlajacego strone i po klopocie. Rekordy zostana skasowane zanim nastepne zapytanie zacznie je wyswietlac, czyli uzytkownik zobaczy tylko aktualne wpisy. Kiedy ktos znowu wywola strone stare wpisy zostana usuniete (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Mozna tez dodac to zapytanie przed zapytaniem dodajacym usera do bazy track, wtedy automatycznie najpierw bedziemy kasowac stare wpisy a potem dodawac nowe. Jeszcze lepszym rozwiazaniem moze byc najpierw dodawac nowe / modyfikowac istniejace rekordy, a potem usuwac stare (przy modyfikacji jest chyba mniejsze obciazenie bazy chyba niz jak kasujesz rekord i za chwile dodajesz nowy)

Zastosowanie tego rozwiazania ma jednak pewien minus (generuje wieksze obciazenie bazy niz wywolana z crona raz na minute komenda sqla w sytuacjach kiedy twoj serwis jest popularny) wiec w zaleznosci od sytuacji trzeba rozwazyc co berdzie lepsze cron czy kasowanie z poziomu php
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 15:37