![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 27.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki kod dla liczby aktywnych użytkowników przez ostatnie 24h:
Kod <?php $polaczenie=mysql_connect('','','') or die(''); mysql_select_db('') or die(''); $czas=mktime(); $ip=$_SERVER['REMOTE_ADDR']; $staryczas=mktime()-86400; $zapytanie=mysql_query("DELETE FROM dzis WHERE czas<'$staryczas'"); $link=mysql_query("SELECT ip FROM dzis WHERE ip='$ip'"); $ile=mysql_num_rows($link); if($ile==0) { mysql_query("INSERT INTO dzis VALUES(NULL,'$ip','$czas')"); } else { mysql_query("UPDATE dzis SET czas='$czas' WHERE ip='$ip'"); } $link=mysql_query("SELECT * FROM dzis"); $ile=mysql_num_rows($link); echo '<b>'.$ile.'</b>'; ?> Czy ten kod jest optymalny? Gromadzi mi się w tabeli od 2300 do 2700 rekordów, więc obrót danych jest trochę duży. Czy da się jakoś jeszcze zoptymalizować ten kod, by zżerał mniej zasobów konta na hostingu współdzielonym? Demo działania jest na http://www.gigadownload.net.pl w panelu Statystyki (po prawej). Pozdrawiam Ten post edytował GigaDownload 9.11.2008, 19:48:33 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 25.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Moja propozycja jest taka:
jeśli uznajesz IP za wystarczająco unikalne, zrób sobie taką tabelę w MySQL
aktualizację robisz tak:
ilość ostatnio widzianych robisz tak:
Od razu mówię - piszę z głowy, bez sprawdzania, więc nie gwarantuję 100% poprawności/braku literówek itp. Edit: 1. tak sobie pomyślałem, że na kolumnie lastSeen też możesz założyć index. I być może będzie szybciej, jeżeli ta kolumna nie będzie typu DATETIME ale po prostu INT - odpadną kwestie przekształcania i przetwarzania funkcji FROM_UNIXTIME 2. Nie umieszczam tu kasowania: nie musisz kasować na bieżąco, bo filtrujesz wyniki przy liczeniu -> w efekcie masz jedno zapytanie mniej. Kasowanie możesz sobie odpalić raz na jakiś czas... Ten post edytował singollo 27.11.2008, 00:34:35 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 19:50 |