用于生成最受欢迎项目的算法

时间:2012-03-13 07:51:56

标签: php mysql

我正在使用php和mysql进行文章的网站...我正在存储查看率和

的比率

不同领域的数据库中的文章...现在我想选择最受欢迎的文章

天(指今天),月份和年份基于观看率和类似率...是否有任何算法

使用这些数据查找最受欢迎的文章....?

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以将喜欢的内容保存为数据库中的单个对象,就像在这种表中一样:

CREATE TABLE  `like` (
    `article_id` INT UNSIGNED NOT NULL ,
    `user_id` INT UNSIGNED NOT NULL ,
    `liked_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    PRIMARY KEY (  `article_id` ,  `user_id` ) ,
    INDEX (  `liked_at` )
);

每次用户喜欢你在一行内的文章(article_id,user_id,NOW())到这个表中。

要获得热门文章,只需选择今天或本月或今年的任何元组,按照article_id分组,将(article_id)分组为分数,最后按此分数排序。

获取今天最受欢迎的5篇文章:

SELECT article_id, count(user_id) as score
FROM like
WHERE liked_at > NOW() - 86400
GROUP BY article_id
ORDER BY score DESC
LIMIT 5

WHERE liked_at > NOW() - 86400仅选择不超过24小时的喜欢。

如果你知道你今天只想要今天,今年和今年一样,你可以有一张像

这样的桌子。
CREATE TABLE  `article` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `likes_today` INT NOT NULL DEFAULT  '0',
    `likes_this_month` INT NOT NULL DEFAULT  '0',
    `likes_this_year` INT NOT NULL DEFAULT  '0'
);

对于每个人来说,您都会将文章的likes_todaylikes_this_monthlikes_this_year增加一个。对于所有文章,您每天都会likes_today设置为0。每月一次,您为所有文章设置likes_this_month0

今天最受欢迎的5篇文章:

SELECT id, likes_today
FROM article
ORDER BY likes_today DESC
LIMIT 5

请注意我对today使用了两种不同的含义。在第一个示例中,today表示not older than 24 hours。在第二个示例中,today表示since last reset

答案 1 :(得分:0)

SELECT title FROM today WHERE viewed DESC ./day
SELECT title FROM month WHERE viewed DESC ./day
SELECT title FROM year WHERE viewed DESC ./day

cinda解释了我想说的话:D