Počet komentářů od nicku (c) Oldřich Šálek
Nejprve jsem se snažil řešit problém přes dvourozměrné $pole, ve kterém bude hodnota nick, pocet. Jenože ať jsem se snažil jak jsem se snažil, nikdy se mi nepovedlo dořešit do konce. Většinou jsem ztroskotal na možnosti, že dva nicky mají shodný počet komentářů, tudíž nešli seřadit.
Pak mě napadlo využít pomocnou temp tabulku, do které budu ukládat $nick a $pocet. Moje řešení fungovalo krásně, na hostingu savany trval výpočet pouze 0,2 sekundy. Navíc jsem měl vyřešené kešování údajů.
<?
//$sql = mysql_query("TRUNCATE TABLE `rs_kom_stat`");
$query =
mysql_query("SELECT * FROM rs_kom GROUP BY nick " ) or die (mysql_error());
while ($zaznam = mysql_fetch_array ($query ))
{
$ktery_nick = $zaznam["nick" ];
$nick = $zaznam["nick" ];
$dotaz = mysql_query (" SELECT * FROM rs_kom WHERE nick = "$ktery_nick"" ) or die ( mysql_error());
$pocet = mysql_num_rows($dotaz);
if ( $pocet > 10 )
{
$uz_existuje = mysql_query("SELECT * FROM " .prefix ."kom_stat WHERE nick ="$nick" LIMIT 1" ) or die ( mysql_error());
if (mysql_num_rows($uz_existuje )<=0 )
{ //neexistuje záznam
mysql_query (" INSERT INTO ". prefix. "kom_stat VALUES ("", "$nick", "$pocet")") or die (mysql_error());
}
else
{ // existuje
MySQL_Query ("UPDATE ". prefix. "kom_stat SET pocet = $pocet WHERE nick="$nick" " );
}
}
}
$vypis = mysql_query (" SELECT * FROM ".prefix. "kom_stat ORDER BY pocet_kom DESC LIMIT 10" ) or die (mysql_error ());
$i = 1;
while ( $z_db = mysql_fetch_array ($vypis ))
{
$nick = $z_db ["nick"];
$pocet = $z_db ["pocet_kom" ];
echo "$i $nick napsal $pocet příspěvků <br />
";
$i++;
}
?>
Dneska mi matej21 poslal na do komentářů skript, kterému jsem nejprve nevěnoval pozornost. Měl pouze pár řádků, oproti mému 36 řádkovému kódu. Myslel jsem, že nebude fungovat, už jenom pohled na proměnou $řádky (háčky a čárky fuj) mě utvrzoval i ztraceném času.
Když jsem ovšem skript spustil a on hned fungoval, žasnul jsem. Můj 36 řádkový problém vyřešen efektivněji na pár řádkách kódu. Kód je i 10x rychlejší, než můj starý. Jedním slovem, úžasné.
<?
$query = mysql_query("SELECT COUNT( * ) AS `radku` , `nick`
FROM `rs_kom`
GROUP BY `nick`
ORDER BY `radku` DESC
LIMIT 25");
$poradi = 1;
while($row = mysql_fetch_array($query))
{
echo $poradi . ". " . $row["nick"] . " napsal " . $row ["radku"] . " příspěvků<br/>" ;
$poradi++;
}
?>
Statistiky můžete vidět na mozektevidi.net/co/statistiky. Hned za uživatelem MzK následuje také seznam největších spamerů na mozektevidi.net