我在其他地方搜索过,但我找不到任何显示您的参考或教程,或者解释显示热门评论的最佳方式(比如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等)。
答案 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