Помогите с формулой

Started by ler on 2015-01-23 14:14 — 9 replies, 1522 views

#1
На трекере у меня стоит ограничение в 5 скачиваний в сутки. (в таблице bb_users поле downloads)

Также стоит мод СИД бонус.

Хочу чтобы при обмене сидбонусов также увеличивалось значение в колонке downloads.
Другими словами если пользователь хорошо сидирует, то у него есть возможность обменять сид бонус, увеличить рейтинг + увеличить доступное количество скачиваний бесплатно.

Формула типа 1 сидбонус=1 дополнительная загрузка не катит. Потому что есть пользователи с бонусом в 40000
#2
Думаю тут необходимо привязаться к рейтингу, так как если пользователь хорошо раздает, соответственно его рейтинг больше 1, теперь осталось придумать насколько больше единицы это соотношение должно быть, например рейтинг 1,3 + 1 download, 1.5 - 2 + 2 download и так дальше в диапазонах на свой вкус
#3
Вот запросы из базы
Spoiler content hidden.
Spoiler content hidden.
Spoiler content hidden.
Spoiler content hidden.
Spoiler content hidden.

Если взять промежуток 12 мес, то вот что выходит по количеству юзеров:
Для user_points<500 Количество юзеров 19595
Для user_points>500 Количество юзеров 705

Для 500 < user_points < 1000 Количество юзеров 250
Для 1000 < user_points < 2000 Количество юзеров 227
Для 2000 < user_points < 3000 Количество юзеров 93
Для 3000 < user_points < 4000 Количество юзеров 58
Для user_points > 5000 Количество юзеров 50
#4
Про рейтинг, не подумал. Сейчас попробую.
#5
По рейтингу наверно не получится. У меня же крон задача стоит, которая каждые 24 часа обновляет количество доступных загрузок

if (!defined('BB_ROOT')) die(basename(__FILE__));
$sql = DB()->fetch_rowset("
    SELECT user_id
    FROM ". BB_USERS ."
    WHERE user_id NOT IN(". EXCLUDED_USERS_CSV .")
    AND downloads <=4
");
foreach ($sql as $row)
{
    $user_id=$row['user_id'];
    DB()->query("UPDATE ". BB_USERS ." SET downloads=5 WHERE user_id = $user_id");
}

Придется считать рейтинг для каждого пользователя.... Не умрет ли база от таких запросов?
#6
Ну вы в цикле для каждого пользователя раз в сутки количество запросов на базу делаете равное количество пользователей соответствующих критерию, можно было бы и одним запросом всем поставить снова 5. Нужно сделать выборку по формуле рейтинга
#7
Готово. Если не лень гляньте, годится ли. С меня бонус WMR в копилку torrentpier
<?php
if (!defined('BB_ROOT')) die(basename(__FILE__));
$sql = DB()->fetch_rowset("
    SELECT bt.u_up_total, bt.u_down_total, bt.u_up_release, bt.u_up_bonus, bu.user_id, bu.downloads
    FROM      ". BB_BT_USERS   ." bt
    LEFT JOIN ". BB_USERS ." bu ON (bt.user_id = bu.user_id)
    WHERE bt.user_id NOT IN(". EXCLUDED_USERS_CSV .")
    AND bu.user_rank = 0
    GROUP BY bt.user_id
");
foreach ($sql as $row)
{
    $user_id=$row['user_id'];
    $bt_ratio = round((($row['u_up_total'] + $row['u_up_release'] + $row['u_up_bonus']) / $row['u_down_total']), 2);
  
    $x=ceil(sqrt($bt_ratio));

    $downloads=$x+$bb_cfg['allowed_downloads'];
  
if($row['u_down_total'] > MIN_DL_FOR_RATIO){  
      
    DB()->query("UPDATE ". BB_USERS ." SET downloads=".$downloads." WHERE user_id = $user_id");

}
else {
  
    DB()->query("UPDATE ". BB_USERS ." SET downloads=".$bb_cfg['allowed_downloads']." WHERE user_id = $user_id");
  
}
#8
@ler скобку закрывающую у форича только потеряли.
#9
Разобрался
#10
@ler можно глянуть как это все выгдядит в действии?