PHP-MYSQL raiting评论

时间:2011-10-11 23:15:34

标签: php mysql comments rating

我有一个问题,你可能会觉得它很愚蠢,但无论如何

在php评论中制作时,我认为如果人们可以用+ 1 / -1评价评论会很酷,所以我在数据库中为评论(id,user_id,评论,时间)做了一个表,另一个对于评级评论(id_rate,id_comment,id_user,时间)我使用id_user,所以他不能评价两次相同的评论

问题如下:如果博客文章有100个评论,每个评论都有200票(+1或-1),那么页面加载速度太慢,很多很多查询只是加载一些评论?

是另一种方法,可以按照正常形式的DB进行此操作吗?

感谢您的时间,我真的很感激。

2 个答案:

答案 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表格中。否则,检查评级评论表以验证用户尚未投票,应该使用适当的索引相对较快。