Передача строк mysql в алгоритм подсчета очков? - PullRequest
0 голосов
/ 29 октября 2010

У меня есть эта функция ранжирования алгоритма php (новости хакера):

function calculate_score($votes, $item_hour_age, $gravity=1.8){
    return ($votes - 1) / pow(($item_hour_age+2), $gravity);
}

И у меня есть эта таблица в MySql:

post{id, post_text, votes, date}:

Мне было интересно, как я могу передать эти MySqlпараметры данных для этой функции, чтобы определить порядок их ввода, PS.$item_hour_age, сколько часов пост был опубликован.

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

Ну, у вас уже есть $ votes, поэтому вам нужно всего лишь изменить $ date на часы:

 $item_hour_age = (time() - $date) / 60 / 60;   // minutes+seconds

Соберите выходные данные в массиве результатов и отсортируйте его:

 foreach ($pdo->fetchAll() as $article) {

     $score = calculate_score(...);

     $r[$score] = $article;
 }
 krsort($r);

Затем переберите список статей из $ r и выведите их.

1 голос
/ 24 мая 2012

Я не знаю ваших спецификаций в деталях, но вы можете использовать запрос MySQL.

Простой и, вероятно, намного более быстрый с точки зрения процессора и памяти, позволяющий разбивать возможные результаты на страницы (если вам это нужно) с меньшим использованием памяти PHP

ВЫБРАТЬ т. *, (votes -1) / POW ((DATE_DIFF (NOW (), date)), 1,8) как оценка ИЗ таблицы ЗАКАЗАТЬ по баллу DESC

Я предположил, что $ item_hour_age - это разница в днях. Вы можете легко использовать часы путем преобразования в метки времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...