Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Liczba aktywnych użytkowników przez ostatnie 24h
GigaDownload
post 9.11.2008, 19:47:38
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sh4dow
post 10.11.2008, 15:24:30
Post #2





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


No niestety to raczej optymalne nie jest, zamiast zliczać rekordy tak:
  1. <?php
  2. //...
  3. $link=mysql_query("SELECT * FROM dzis");
  4. $ile=mysql_num_rows($link);
  5. //...
  6. ?>

zrob tak:
  1. <?php
  2. $link=mysql_query("SELECT count(*) FROM dzis");
  3. $row = mysql_fetch_array($link);
  4. $ile = $row[0]
  5. ?>

to powinno przyzpieszyc troche i nie bedzie przesylac tyle danych miedzy serverm mysqla a php i ogranicz ilość zapytań dwa powinny w zupełności wystarczyć. Pierwsze kasuje wszystkie stare wpisy i twoj, a drigi dodaje twoj wpis.
  1. <?php
  2. mysql_query("DELETE FROM dzis WHERE czas<'$staryczas' AND ip='$ip'");
  3. ?>
a drugie praktycznie bez zmian
  1. <?php
  2. mysql_query("INSERT INTO dzis VALUES(NULL,'$ip','$czas')");
  3. ?>
no i trzecie zapytanie do zlicznia jak wyżej w przykładzie

Ten post edytował Sh4dow 10.11.2008, 15:40:01


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 05:15