我有一个问题,你可能会觉得它很愚蠢,但无论如何
在php评论中制作时,我认为如果人们可以用+ 1 / -1评价评论会很酷,所以我在数据库中为评论(id,user_id,评论,时间)做了一个表,另一个对于评级评论(id_rate,id_comment,id_user,时间)我使用id_user,所以他不能评价两次相同的评论
问题如下:如果博客文章有100个评论,每个评论都有200票(+1或-1),那么页面加载速度太慢,很多很多查询只是加载一些评论?
是另一种方法,可以按照正常形式的DB进行此操作吗?
感谢您的时间,我真的很感激。
答案 0 :(得分:1)
要获得评论及其评级可以在单个SQL查询中完成。当你有很多评论和评分时,它会很慢,但不是你提到的数字。
如果你想让它更快,你可以在名为" rating"的评论上创建一个属性。或者类似的东西,并且每小时更新一次(或者你认为足够的次数)左右。这不是确切的,但它将接近评论。但我们在此之前正在讨论数以百万计的评论和评级。
这通常是通过物化视图完成的,但遗憾的是在MySQL中没有实现...您可以使用上述方法编写php脚本并通过cronjob运行它。
使用像这样的查询(未经测试):
SELECT *
FROM comments, ratings
WHERE comments.id = ratings.id_comment;
假设您为投票(+1或-1)添加了一个值,您可以对它们进行分组并计算一个查询中的总评论(如未经测试):
SELECT comments.id, comments.user_id, comments.comment,
comments_time, SUM(ratings.value) AS rating
FROM comments, ratings
WHERE comments.id = ratings.id_comment
GROUP BY comments.id;
现在,您将所有评论字段和计算出的评论作为字段rating
。如果你想加速测试,你可以尝试插入一百万个虚拟评论和一百万个评级,看看查询需要多长时间。
为了加快速度,您可以在comments.id_comment上添加索引,如下所示:
CREATE INDEX speedthisthingup ON comments(id_comment);
这应该有助于执行时间:)
祝你好运!答案 1 :(得分:0)
您可以使用另一个名为comments
的字段将当前评论投票缓存在commentvote
表格中。否则,检查评级评论表以验证用户尚未投票,应该使用适当的索引相对较快。