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

时间:2013-11-18 09:21:25

标签: php mysql algorithm sorting

我想制作另一个列有“What's Hot”的列表,例如reddit

found this topic,它解释了排序算法的工作原理

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

如果是,我将如何将其应用于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时的结果。

1 个答案:

答案 0 :(得分:1)

假设你的起伏列被称为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是您计算的列