Autor Zpráva
Anonymní
Profil *
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);
}
Aleš Janda
Profil
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 *
O tom to prave je a proto to bylo navrzeno. Tvoje reseni je o dost horsi , uz v samotne logice.
tiso
Profil
Anonymní
Napríklad také:
if ($stranky) echo "<p>Máme stránek: ".MySQL_Num_Rows($stranky); 

if (!$stranky) echo "Špatně první dotaz ";

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?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0