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

L

ler

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

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

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

Формула типа 1 сидбонус=1 дополнительная загрузка не катит. Потому что есть пользователи с бонусом в 40000
 

Nightmare

Разработчик
#2
Думаю тут необходимо привязаться к рейтингу, так как если пользователь хорошо раздает, соответственно его рейтинг больше 1, теперь осталось придумать насколько больше единицы это соотношение должно быть, например рейтинг 1,3 + 1 download, 1.5 - 2 + 2 download и так дальше в диапазонах на свой вкус
 
Последнее редактирование:
L

ler

Гость
#3
Вот запросы из базы
SELECT user_points FROM `bb_users` WHERE user_level=0 AND user_points>0 AND user_regdate> 1419292800 ORDER BY `bb_users`.`user_points` DESC
Минимальное 0.5
Максимальное 6
Среднее 1.97
SELECT user_points FROM `bb_users` WHERE user_level=0 AND user_points>0 AND user_regdate> 1416700800 ORDER BY `bb_users`.`user_points` DESC
Минимальное 0.5
Максимальное 23
Среднее 1.8
SELECT user_points FROM `bb_users` WHERE user_level=0 AND user_points>0 AND user_regdate> 1414022400 ORDER BY `bb_users`.`user_points` DESC
Минимальное 0.5
Максимальное 23
Среднее 1.71
SELECT user_points,avg(user_points) FROM `bb_users` WHERE user_level=0 AND user_points>0 AND user_regdate> 1408752000 ORDER BY `bb_users`.`user_points` DESC
Минимальное 0.5
Максимальное 2626
Среднее 118
SELECT avg(user_points) FROM `bb_users` WHERE user_level=0 AND user_points>0 AND user_regdate> 1390435200 ORDER BY `bb_users`.`user_points` DESC
Минимальное 0.5
Максимальное 22000
Среднее 578

Если взять промежуток 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
 
L

ler

Гость
#5
По рейтингу наверно не получится. У меня же крон задача стоит, которая каждые 24 часа обновляет количество доступных загрузок

PHP:
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");
}
Придется считать рейтинг для каждого пользователя.... Не умрет ли база от таких запросов?
 

Nightmare

Разработчик
#6
Ну вы в цикле для каждого пользователя раз в сутки количество запросов на базу делаете равное количество пользователей соответствующих критерию, можно было бы и одним запросом всем поставить снова 5. Нужно сделать выборку по формуле рейтинга
 
Последнее редактирование:
L

ler

Гость
#7
Готово. Если не лень гляньте, годится ли. С меня бонус WMR в копилку torrentpier
PHP:
<?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");
  
}
 
Сверху