0

我担心这会很快变得相当复杂,但我想知道显示按“人气”排序的最新“活动”的最佳方法是什么 - 这是“喜欢”或“观点”的衡量标准(甚至可能两者都有,如果可能的话 - 将喜欢计算为 2x 视图?)。

因此,如果我的数据库中充满了带有查看和/或喜欢的帖子,我希望能够显示过去 24 小时内最受欢迎的前 5% 的帖子。

我有 3 个表,一个用于帖子,两个用于喜欢和查看(1 行 = 1 个喜欢/查看)

表 1 = “帖子”

id | title | timestamp | etc.

表 2 = "posts_likes"

post_id | user_id

表 3 =“posts_views”

post_id | user_id

使用 MySQL + PHP,运行此查询以按其整体计算的受欢迎程度对我的帖子进行排序的最佳方式是什么?

非常感谢,蒂姆

4

2 回答 2

1

我会给你一些伪 sql 来展示我会使用的想法,你可以添加缺失的位并让它工作。它假设前 5% 是基于帖子的数量,但如果它是基于喜欢加浏览量的分数,那么调整应该是微不足道的。

SET @foo=0.05 * select count(*) from posts where (timestamp < today - 24 hours); 
PREPARE STMT FROM 'SELECT posts,sum(likes) * 2 + sum(views) as POPULAR FROM (tables joined) ORDER BY popular LIMIT ?';
EXECUTE STMT USING @foo;

问候,

于 2013-02-05T13:49:24.067 回答
1

我无法对此进行测试,因为我现在没有可访问的 MySQL 服务器 - 但下面的查询应该让你开始:

SELECT p.id, p.title, ((COUNT(l.id) * 2) + COUNT(v.id)) AS popularity 
    FROM posts p 
        LEFT JOIN posts_likes l ON l.post_id = p.id 
        LEFT JOIN posts_views v ON v.post_id = p.id 
    WHERE p.timestamp > (UNIX_TIMESTAMP()-86400)
    GROUP BY p.id
    ORDER BY popularity DESC LIMIT :return_limit

运行查询时,您需要传递一个参数:return_limit- 应该是COUNT()过去 24 小时内所有帖子的 5%。

于 2013-02-05T14:23:45.133 回答