我正在使用php和mysql进行文章的网站...我正在存储查看率和
的比率不同领域的数据库中的文章...现在我想选择最受欢迎的文章
天(指今天),月份和年份基于观看率和类似率...是否有任何算法
使用这些数据查找最受欢迎的文章....?
有人可以帮助我吗?
答案 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_today
,likes_this_month
和likes_this_year
增加一个。对于所有文章,您每天都会likes_today
设置为0
。每月一次,您为所有文章设置likes_this_month
到0
。
今天最受欢迎的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