Files
oc-server3/htdocs/util2/cron/modules/rating_tops.class.php
T
2012-08-27 14:15:16 +02:00

78 lines
3.9 KiB
PHP

<?php
/***************************************************************************
* For license information see doc/license.txt
*
* Unicode Reminder メモ
*
* Update top rating statistics
***************************************************************************/
checkJob(new rating_tops());
class rating_tops
{
var $name = 'rating_tops';
var $interval = 86400;
function run()
{
sql("DELETE FROM `rating_tops`");
sql_temp_table('topLocationCaches');
sql_temp_table('topRatings');
sql_temp_table('topResult');
sql("CREATE TEMPORARY TABLE &topLocationCaches (`cache_id` INT(11) PRIMARY KEY) ENGINE=MEMORY");
sql("CREATE TEMPORARY TABLE &topRatings (`cache_id` INT(11) PRIMARY KEY, `ratings` INT(11)) ENGINE=MEMORY");
sql("CREATE TEMPORARY TABLE &topResult (`idx` INT(11), `cache_id` INT(11) PRIMARY KEY, `ratings` INT(11), `founds` INT(11)) ENGINE=MEMORY");
$rsAdm1 = sql('SELECT SQL_BUFFER_RESULT SQL_SMALL_RESULT DISTINCT `adm1`, `code1` FROM `cache_location` WHERE NOT ISNULL(`adm1`) ORDER BY `adm1` ASC');
while ($rAdm1 = sql_fetch_assoc($rsAdm1))
{
$rsAdm3 = sql("SELECT SQL_BUFFER_RESULT SQL_SMALL_RESULT DISTINCT `adm3` FROM `cache_location` WHERE `code1`='&1' ORDER BY `adm3` ASC", $rAdm1['code1']);
while ($rAdm3 = sql_fetch_assoc($rsAdm3))
{
sql("TRUNCATE TABLE &topLocationCaches");
sql("TRUNCATE TABLE &topRatings");
sql("TRUNCATE TABLE &topResult");
// Alle Caches für diese Gruppe finden
if ($rAdm3['adm3'] == null)
sql("INSERT INTO &topLocationCaches (`cache_id`) SELECT `caches`.`cache_id` FROM `cache_location` INNER JOIN `caches` ON `caches`.`cache_id`=`cache_location`.`cache_id` LEFT JOIN `stat_caches` ON `caches`.`cache_id`=`stat_caches`.`cache_id` WHERE IFNULL(`stat_caches`.`toprating`,0)>0 AND `cache_location`.`adm1`='&1' AND ISNULL(`cache_location`.`adm3`) AND `caches`.`status`=1", $rAdm1['adm1']);
else
sql("INSERT INTO &topLocationCaches (`cache_id`) SELECT `caches`.`cache_id` FROM `cache_location` INNER JOIN `caches` ON `caches`.`cache_id`=`cache_location`.`cache_id` LEFT JOIN `stat_caches` ON `caches`.`cache_id`=`stat_caches`.`cache_id` WHERE IFNULL(`stat_caches`.`toprating`,0)>0 AND `cache_location`.`adm1`='&1' AND `cache_location`.`adm3`='&2' AND `caches`.`status`=1", $rAdm1['adm1'], $rAdm3['adm3']);
sql("INSERT INTO &topRatings (`cache_id`, `ratings`) SELECT `cache_rating`.`cache_id`, COUNT(`cache_rating`.`cache_id`) AS `ratings` FROM `cache_rating` INNER JOIN &topLocationCaches ON `cache_rating`.`cache_id`=&topLocationCaches.`cache_id` INNER JOIN `caches` ON `cache_rating`.`cache_id`=`caches`.`cache_id` WHERE `cache_rating`.`user_id`!=`caches`.`user_id` GROUP BY `cache_rating`.`cache_id`");
sql("INSERT INTO &topResult (`idx`, `cache_id`, `ratings`, `founds`)
SELECT SQL_SMALL_RESULT (&topRatings.`ratings`+1)*(&topRatings.`ratings`+1)/(IFNULL(`stat_caches`.`found`, 0)/10+1)*100 AS `idx`,
&topRatings.`cache_id`,
&topRatings.`ratings`,
IFNULL(`stat_caches`.`found`, 0) AS founds
FROM &topRatings
INNER JOIN `caches` ON &topRatings.`cache_id`=`caches`.`cache_id`
LEFT JOIN `stat_caches` ON `stat_caches`.`cache_id`=`caches`.`cache_id`
ORDER BY `idx` DESC LIMIT 15");
if (sql_value("SELECT COUNT(*) FROM &topResult", 0) > 10)
{
$min_idx = sql_value("SELECT `idx` FROM &topResult ORDER BY idx DESC LIMIT 9, 1", 0);
sql("DELETE FROM &topResult WHERE `idx`<'&1'", $min_idx);
}
sql("INSERT INTO `rating_tops` (`cache_id`, `rating`)
SELECT SQL_BUFFER_RESULT &topResult.`cache_id`,
&topResult.`idx` AS `rating`
FROM &topResult
ORDER BY `rating` DESC");
}
sql_free_result($rsAdm3);
}
sql_free_result($rsAdm1);
sql_drop_temp_table('topLocationCaches');
sql_drop_temp_table('topRatings');
sql_drop_temp_table('topResult');
}
}
?>