Autor | Zpráva | ||
---|---|---|---|
Jankosar Profil |
#1 · Zasláno: 9. 3. 2009, 21:56:32
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 |
#2 · Zasláno: 9. 3. 2009, 23:36:09 · Upravil/a: ninja
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 |
#3 · Zasláno: 9. 3. 2009, 23:36:22 · Upravil/a: Mastodont
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 |
#4 · Zasláno: 10. 3. 2009, 22:09:42
Děkuji mnohokrát, zkoušel jsem verzi od Mastodonta a funguje dokonale.
|
||
Časová prodleva: 15 let
|
0