我已经搜索过其他地方,但我找不到任何引用或教程来向您展示或解释显示热门评论的最佳方式(例如 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 等)。
最佳答案
我能想到的有两种方法。
一种是,您可以将当前显示的评论 ID 存储在一个数组中,并通过 ajax 调用传递它们,然后在 SQL 语句中进行过滤,排除这些评论 ID 并获取其余的热门评论,一旦获得响应,就追加将这些 id 添加到同一个数组中,您可以继续执行此操作。
或者
您可以在页面加载时定义一个时间戳来指示服务器时间(例如: var loadTimeStamp = "<?php echo time(); ?>"
),然后将此值与限制一起作为 Ajax 调用的一部分传递。
然后在服务器端,您可以排除在此时间之后添加的任何评论,从而保留评论列表。但要实现这一点,您需要存储人们发表评论的时间,并查看 facebook 用来获取更多评论的 AJAX 调用,他们似乎正在遵循这种类型的方法,因为我可以看到他们通过调用传递时间戳(我可能是错误的,但他们的 AJAX 调用会传递时间戳,所以我假设..)
使用此方法,您可以更进一步,使用此时间以及基本的 ajax 长轮询技术来通知用户自页面加载/上次加载新评论以来的任何新评论,类似于 Facebook 和 Twitter提要。
希望你明白了。
关于php - 如何获取热门评论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390179/