Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 27. 7. 2006, 14:41:08
Ahoj
Loguji každou návštěvu uživatele na stránce do tabulky "visits_log" o této struktuře: id | id_uzivatele | id_sranky | datum | cas Následně bych jednou za den chtěl provádět přepočet do uspornější tabulky "visits" o struktuře: id | id_stranky | datum | celkovypocetvisits | celkovypocetuzivatelu Níže je postup jak provádím přepočet. Používám ale kostrukci se kterou nemám praktické zkušenosti a rád bych zkonzultoval jak je dobrá (zejména co do zatěžování databáze) a zda existuje lepší řešení. $datum = Date("Y-m-d"); $den = Date("d"); $mesic = Date("m"); $rok = Date("Y"); $stranky=MySQL_Query("SELECT id_stranky FROM visits_log WHERE ((DAYOFMONTH(date)=$den) AND (MONTH(date)=$mesic) AND (YEAR(date)=$rok)) GROUP BY id_stranky",$spojeni); if ($stranky) echo "<p>Máme stránek: ".MySQL_Num_Rows($stranky); if (!$stranky) echo "Špatně první dotaz "; while ($vypis_stranky = MySQL_Fetch_Array($stranky)) { $id_stranky=$vypis_stranky["id_stranky"]; $kliky=MySQL_Query("SELECT Count(*) AS pocet_kliku FROM visits_log WHERE ((id_stranky='$id_stranky') AND ((DAYOFMONTH(date)=$den) AND (MONTH(date)=$mesic) AND (YEAR(date)=$rok)))",$spojeni); $uzivatele=MySQL_Query("SELECT Count(*) AS pocet_uzivatelu FROM visits_log WHERE ((id_stranky='$id_stranky') AND ((DAYOFMONTH(date)=$den) AND (MONTH(date)=$mesic) AND (YEAR(date)=$rok))) GROUP BY id_uzivatele",$spojeni); $vypis_kliky = MySQL_Fetch_Array($kliky); $vypis_uzivatele = MySQL_Fetch_Array($uzivatele); echo "<br>Stránka: $id_stranky má ".$vypis_kliky['pocet_kliku']." kliků a ".$vypis_uzivatele['pocet_uzivatelu']." uživatelů"; $log=MySQL_Query("INSERT INTO visits VALUES ('$idd','$id_stranky','$datum','$pv','$cookies')",$spojeni); } |
||
Časová prodleva: 1 měsíc
|
|||
Aleš Janda Profil |
#2 · Zasláno: 31. 8. 2006, 08:06:47
Asi už jdu s křížkem po funuse, ale konstrukce
WHERE ((DAYOFMONTH(date)=$den) AND (MONTH(date)=$mesic) AND (YEAR(date)=$rok)) určitě není dobrá. Měl by sis udělat dvě proměnné: $dnes = StrToTime(Date('Y-m-d')); $zitra = StrToTime(Date('Y-m-d',Time()+30*60*60)); a potom používat konstrukci WHERE date >= "'.Date('Y-m-d',$dnes).'" AND date < "'.Date('Y-m-d',$zitra).'" Myslím, že to bude o dost rychlejší - databáze nemusí u každého sloupce vypočítávat hodnoty dnů, měsíců a roku, stačí jí jen porovnat dva INTy. |
||
24_work Profil * |
#3 · Zasláno: 31. 8. 2006, 09:50:12
O tom to prave je a proto to bylo navrzeno. Tvoje reseni je o dost horsi , uz v samotne logice.
|
||
tiso Profil |
#4 · Zasláno: 31. 8. 2006, 11:51:38
Anonymní
Napríklad také: if ($stranky) echo "<p>Máme stránek: ".MySQL_Num_Rows($stranky); Vypovedá o Tvojich programátorských schopnostiach... Celé by som to riešil inak... Otázka: máš to naviazané na CRON? Alebo ako zabezpečuješ prepočítanie raz denne? |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0