将排序算法应用于数据库查询


Apply sorting algorithm to database query

我想用reddit这样的"热门内容"做另一个列表。

我发现了这个主题,它解释了他们的排序算法是如何工作的

首先我想问,使用他们的算法是否合法?

如果是,我将如何将它应用于PHP数据库查询。我需要先选择所有帖子,然后进行排序吗?

function hot($ups, $downs, $date) {
    $s = $ups - $downs;
    $order = log(max(abs(s), 1), 10);
    if(s > 0) {
        $sign = 1;
    } elseif(s < 0) {
        $sign = -1;
    } else {
        $sign = 0;
    }
    $date = new DateTime($date);
    $seconds = $date->format('U');
    return round($order + $sign * $seconds / 45000, 7);
}

这就是我将其转换为PHP时得到的结果。

假设您的上下列被称为upsdowns,那么类似于:

ORDER BY ROUND(
    ( LOG10(
          GREATEST(
              ABS(`ups` - `downs`), 
              1
          )
      ) + 
      SIGN(`ups` - `downs`) *
      UNIX_TIMESTAMP(`date_posted`)  / 45000
    ),
    7
)

使用这个公式在您的选择列表中创建一个计算列,然后按该列排序可能是一个更好的主意

编辑

计算列示例:

SELECT `ups`,
       `downs`,
       `posted_date`,
       ROUND(
           ( LOG10(
               GREATEST(
                   ABS(`ups` - `downs`), 
                   1
               )
             ) + 
             SIGN(`ups` - `downs`) *
             UNIX_TIMESTAMP(`date_posted`)  / 45000
           ),
           7
       ) AS hotness
  FROM `posts`

所以hotness是您计算的列