2010-10-28 52 views
0

我有这个PHP算法排序函数(黑客新闻):将mysql行传递给评分算法?

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

那么你已经有了$ 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的文章列表中输出。

+0

谢谢,但我如何命令我的结果使用此功能?当我通过参数 – getaway 2010-10-28 23:57:04

+0

你必须组装它们,使用得分作为数组索引... – mario 2010-10-28 23:58:47

+0

多数民众赞成什么我没有得到,即时通讯新的php – getaway 2010-10-28 23:59:35

1

我不知道你的规格的细节,但你可以使用MySQL查询。

简单,而且可能更快速的CPU和内存方面,使可能的结果分页(如果需要的话)与PHP使用更少的内存

SELECT吨。*,(votes -1)/ POW ((DATE_DIFF(NOW(),date)),1.8)的得分 FROM表的顺序按分数降序

我应该$ item_hour_age它在天的差别。你可以很容易地使用小时通过转换为时间戳