[ Kusur @ 15.02.2004. 14:40 ] @
Pozdrav svima

Pokušavam da napravim jednostavnu statistiku posete
određenim stranama (knjigama) na sajtu.

MySql / PHP

Baza:

Code:
CREATE TABLE statistika (
  knjiga_id int(11) NOT NULL default '0',
  datum varchar(20) NOT NULL default '',
  broj_pregleda int(20) NOT NULL default '0',
  UNIQUE KEY knjiga_id (knjiga_id)
) ENGINE=MyISAM;



Uradio sam to sa "update" na strani za podatke o knjizi:

Code:
<?php
$knjigaID= $HTTP_GET_VARS['Knjiga_ID'];
$datum = date("F Y");
$broj = $row_stat['broj_pregleda']+1;
mysql_select_db($neka_baza, $neki_fajl);
$sql = "UPDATE statistika SET broj_pregleda='$broj',
datum='$datum' WHERE knjiga_id='$knjigaID'";
mysql_query($SQL);
?>


U tabeli mora da postoji zapis o toj knjizi, koji ja dodam ručno.

Probao sam i samo sa "insert" pa upisujem svaku posetu na toj strani u bazu,
a posle brojim sa "count" i izvlačim iz baze. Ovaj način mi se čini "nezgodan" - ako ima
np. 1000-2000 poseta mesečno biće 1000-2000 "rekorda" u bazi itd.

Pitanje

Kako da prvo proverim da li "knjigaID" postoji u tabeli statistika:

a) ne postoji - INSERT u tabelu statistika
b) postoji - UPDATE polje broj_poseta+1

Unapred hvala

[Ovu poruku je menjao Goran Rakić dana 28.02.2004. u 23:58 GMT]
[ _owl_ @ 15.02.2004. 16:24 ] @
A sta kazes da kada unosis knjigu u bazu dodas i upit koji unosi njen id u tabelu statistika ;). Ako ti ne treba broj prikaza na strani sa knjigom povecavanje broja pregleda mozes da radis i bez SELECT naredbe nad postojecim broje poseta preko
Code:

UPDATE statistika SET broj_pregleda=broj_pregleda+1, datum=NOW() WHERE knjiga_id=sta_vec
[ arsa xx @ 15.02.2004. 16:33 ] @
Evo koda koji sam napisao za jedan moj sajt od nule ;)

Formiraj tabelu 'statistika' sa poljima 'statistic_key' i 'statistic_value'
Upisi dva reda rucno:
1. satistic_key='users_unique_visits' , statistic_value=0
2. stistic_key='users_total_click', statistic_value=0

Evo koda:
Code:

/////////////////////////////////////////////////////
// >> Za statistiku 

$self = $_SERVER["PHP_SELF"]."?".$_SERVER["QUERY_STRING"];

$sql="SELECT * FROM statistics WHERE statistic_key='$self'";
$result=db_query($sql);
if(db_num_rows($result)>0)
{
    $sql="UPDATE statistics SET statistic_value=statistic_value+1 
                    WHERE statistic_key='$self'";
}
else
{
    $sql="INSERT INTO statistics (statistic_key,statistic_value) 
                    VALUES ('$self',1) ";
}
db_query($sql);

if(!isset($_COOKIE["user_code"]))
{
    $user_code=md5(uniqid($_SERVER["REMOTE_ADDR"]));
    setcookie( 'user_code',$user_code, time() + 365*60*60  );
    $sql="UPDATE statistics SET statistic_value=statistic_value+1 
                    WHERE statistic_key='users_unique_visits'";
    db_query($sql);
}
else
{
    $user_code=$_COOKIE[user_code];
}

isset($_COOKIE['user_code']) ? $user_code=$_COOKIE['user_code']) : $user_code=md5(uniqid($_SERVER["REMOTE_ADDR"]));
setcookie( 'user_code',$user_code, time() + 365*60*60  );
$sql="UPDATE statistics SET statistic_value=statistic_value+1 
                WHERE statistic_key='users_total_click'";
db_query($sql);

// << kraj  statistike


Ovaj kod vrsi statistiku strana i ako ti se lista po jedna knjiga po strani to je to ;)

+Unikatne posete + ukupan broj klikova ;)
[ LaMpiR @ 15.02.2004. 18:26 ] @
Pa zasto ne koristis L10Apps counter ima sve moguce i to je uradjen u flashu i php-u


http://www.leveltendesign.com/L10Apps/HC/
[ Ser_Boyler @ 18.02.2004. 10:21 ] @
Citat:
LaMpiR:
Pa zasto ne koristis L10Apps counter ima sve moguce i to je uradjen u flashu i php-u

Verovatno zato sto nesto slicno pokusava da napravi sam.
[ noviKorisnik @ 18.02.2004. 10:51 ] @
Citat:
Kusur:
Kako da prvo proverim da li "knjigaID" postoji u tabeli statistika:

a) ne postoji - INSERT u tabelu statistika
b) postoji - UPDATE polje broj_poseta+1

mysql_query ("UPDATE ...");
if (mysql_affected_rows () < 1) mysql_query ("INSERT ...");
...
Ovako kako si postavio tabelu za statistiku i način upotrebe govore da polje "datum" nosi informaciju o vremenu polednjeg pristupa stranici knjige. Da li je to slučajno ili si baš tako želeo?


Mada, kad bolje pogledam - ova statistika se odnosi isključivo na knjige, a knjige su ustvari takođe definisane u bazi podataka u nekoj tabeli. Kako se broj poseta vezuje po svakoj knjizi ponaosob, rekao bih da se tabela "knjiga" može proširiti poljima "broj_poseta" i "datum_poslednje_posete" i da se onda radi samo update ovih polja (jer je insert urađen pri definiciji knjige).
[ LaMpiR @ 19.02.2004. 12:16 ] @
samo sam htio pomoci...