如何获取热门评论?

时间:2013-12-05 02:20:41

标签: php mysql sql ajax facebook

我在其他地方搜索过,但我找不到任何显示您的参考或教程,或者解释显示热门评论的最佳方式(比如facebook或youtube上的评论)。

我已经完成了获取记录(20条最重要的评论是按照他们的投票顺序)。但是,我总是被困在哪里,我将如何获取接下来的20个最高评论

以下是我的表格:

评论表

id  |  comments       | comment_id
1      Hi               nj3b21das
2      Cool             jh3lkjb32
3      How are you?     bn32j1343
4      What's up?       3kl213543

votes_comments表(1等于竖起大拇指,-1等于大拇指朝下)

id  |  user_id       | comment_id   |  votes
1      4326542         nj3b21das        1
2      2356453         jh3lkjb32        -1
3      8764354         bn32j1343        1
4      3213543         3kl213543        1

然后我将这两个表结合起来,通过使用下面的查询获得最高评论:

    SELECT `comments`.comments, SUM(`votes_comments`.votes) AS total_votes
    FROM comments
    LEFT JOIN `votes_comments `                 
    ON `votes_comments`.comment_id = `comments`.comment_id
    GROUP BY comment_id
    ORDER BY total_votes
    DESC
    LIMIT 20

上面的查询将获取前20个评论。但是,如果我想使用ajax获取接下来的20个结果并保留显示的先前记录,那么最佳选择是什么呢?

注意:请记住,投票不断变化。因此,获取下一个前20个注释可能会导致已经获取的注释重复。处理这个问题的最佳方法是什么(如Facebook,Youtube等)。

2 个答案:

答案 0 :(得分:1)

我有两种方式可以想到。

一个是,你可以将当前显示的注释id存储在一个数组中并传递那些带有你的ajax调用,然后在SQL语句中过滤掉那些注释id并获取其余的顶部注释,一旦你得到响应,就追加那些id到同一个数组,你可以继续这个。

或者

您可以在页面加载时定义一个时间戳,指示服务器时间(例如:var loadTimeStamp = "<?php echo time(); ?>"),然后将此值与限制一起作为Ajax调用的一部分传递。

然后在服务器端,您可以排除在此时间之后添加的任何注释,从而保留注释列表。但为了实现这个目的,你需要存储人们评论和查看Facebook获取更多评论的AJAX调用的时间,他们似乎遵循这种类型的方法,因为我可以看到他们通过时间戳调用(我可能是错的,但他们的AJAX调用传递时间戳,所以我假设..)

使用此方法,您可以更进一步使用此时间以及基本的ajax长轮询技术,以便在页面加载/上次加载新评论后通知用户任何新评论,类似于Facebook和Twitter饲料。

希望你明白了。

答案 1 :(得分:0)

您只需要准确了解要在LIMIT中开始的响应,我在votes_comments.中添加GROUP BY以避免MySQL中出现模糊错误。

SELECT `comments`.comments, SUM(`votes_comments`.votes) AS total_votes
FROM comments
LEFT JOIN `votes_comments`                 
ON `votes_comments`.comment_id = `comments`.comment_id
GROUP BY `votes_comments`.comment_id
ORDER BY total_votes
DESC
LIMIT 20, 20