Autor Zpráva
Jankosar
Profil
Dobrý den,
potřeboval bych poradit s jedním scriptem. Snažím se vytvořit seznam top 10 nejstahovanějších souborů.
V databázi mám tabulku "stahovani" se sloupci:
id -id záznamu
id_not -id staženého souboru
ip -ip downloadera
datum -ip downloadu


Potřebuju zjistit, kterých 10 souborů bylo nejčastěji stahováno.
Udělal jsem zatím tento script, ale nejspíš protože tabulka obsahuje už pár tisíc záznamů, stránka se scriptem se stále načítá. Nevadí mi, když se to bude načítat dlouho (to bych to spouštěl jen jednou za čas), ale potřebuji, aby se to alespoň načetlo. Jistě existuje mnohem efektivnější řešení, než jaké jsem použil já. Každopádně tady je ten script:

<strong>Nejstahovanější</strong>
<?php



$nota=Array();
$nota_count=Array();
$max=Array(0,0,0,0,0,0,0,0,0,0);
$max_count=Array(0,0,0,0,0,0,0,0,0,0);

mysql_query("SET NAMES 'cp1250'") or die('Could not set names');
$vyber = MYSQL_QUERY("SELECT * FROM stahovani order by id asc");
while ($v = MySQL_Fetch_row($vyber)){
$i=0;
$add=1;
while ($nota[$i])
{
if ($nota[$i]==$v[1])
{
$nota_count[$i]++;
$j=0;
$break=0;
while($j<10)
{
if($nota_count[$i]>$max_count[$j])
{
$max_count[$j]=$nota_count[$i];
$max[$j]=$nota[$i];
$j=10;
}
$j++;
}
$add=0;
}
$i++;
}
if ($add)
{
$nota[$i]=$v[1];
$nota_count[$i]=1;
}
}

echo"dsd";
$i=0;
while($nota[$i])
{
mysql_query("SET NAMES 'cp1250'") or die('Could not set names');
$vyber = MYSQL_QUERY("SELECT * FROM noty WHERE id='".$max[$i]."'");
while ($v = MySQL_Fetch_row($vyber)){
echo($v[3].' - '.$v[2].'('.$max_count[$i].')<br>');
}
}



/*
$sql = mysql_query("SELECT id FROM stahovani");
while ($row = mysql_fetch_array($sql))
{
$id = $row["id"];
$dotaz = "SELECT count(ip) FROM stahovani WHERE id='$id';";
$vysled = mysql_query($dotaz) or die ("nedostupné");
$vysledek = mysql_fetch_row($vysled);
$stazeno[$id] = $vysledek[0];
//echo "<a href=\"detailni_info.php?id=$id\">$interpret - $pisen</a>";

}
arsort($stazeno, SORT_NUMERIC);
reset($stazeno);


for ($i = 0; $i < 10; $i++)
{
$sql = mysql_query("select * from noty where id='".key($stazeno)."';");
$row = mysql_fetch_array($sql);
$interpret = $row["interpret"];
$pisen = $row["pisen"];
$id = $row["id"];

echo "<a href=\"detailni_info.php?id=$id\">(".current($stazeno)."x) $interpret - $pisen</a><br/>";
next($stazeno);
} */
?>




Ten uvozený úryvek na konci je původní řešení webu, který předělávám. To všem taky z jakéhosi záhadného důvodu nefunguje.

Budu velmi vděčný za jakoukoliv pomoc.
ninja
Profil
SELECT COUNT(id) AS pocet_stazeni, id_not, MAX(datum) AS naposledy_stazeno FROM tabulka GROUP BY id_not ORDER BY 1 DESC LIMIT 10;
Mastodont
Profil
id -id záznamu
id_not -id staženého souboru
ip -ip downloadera
datum -ip downloadu


To se dá spočítat dotazem ... z hlavy střílím
SELECT id_not, count(id_not) FROM tabulka group by id_not order by 2 desc limit 10
Jankosar
Profil
Děkuji mnohokrát, zkoušel jsem verzi od Mastodonta a funguje dokonale.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: