PHP-MYSQL 评分评论

标签 php mysql comments rating

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

在制作 php 评论时,我认为如果人们可以用 +1/-1 对评论进行评分,那会很酷,所以我在数据库中创建了一个表用于评论(id、user_id、评论、时间)和另一个表对于评分评论(id_rate、id_comment、id_user、时间),我使用 id_user,因此他无法对同一评论进行两次评分

问题如下:如果一篇博客文章有大约 100 条评论,并且每条评论都有大约 200 票(+1 或 -1),则页面加载速度不会太慢,而是需要加载大量查询一些评论?

是否有另一种方法可以按照 DB 的正常形式来执行此操作?

感谢您抽出宝贵的时间,我真的很感激。

最佳答案

要获取评论及其评级,可以在单个 SQL 查询中完成。当您有大量评论和评分时,速度会很慢,但对于您提到的数字而言,速度不会很慢。

如果您想让速度更快,您可以在评论上创建一个名为“评级”或类似名称的属性,并每小时更新一次(或者您认为足够的频率)左右。它不会是准确的,但会近似评论评级。但我们在这里讨论的是数百万条评论和评分,这是必要的。

这通常是通过物化 View 来完成的,但遗憾的是 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;

您现在将拥有所有评论字段和计算出的评论评级作为字段评级。如果您想对其进行速度测试,您可以尝试插入一百万个虚拟评论和一百万个评分,然后看看查询需要多长时间。

要加快速度,您可以在 comments.id_comment 上添加索引,如下所示:

CREATE INDEX speedthisthingup ON comments(id_comment);

这应该对执行时间有很大帮助:)

祝你好运!

关于PHP-MYSQL 评分评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733624/

相关文章:

mysql - 位(8)与tinyint

python - 为什么 Python 没有多行注释?

php - 如果文件中的字符被修改,NFS 不会同步文件

php - 在循环中创建 HTML 元素

mysql - 当时间和日期连接时选择数据范围

PHP:带引号的评论回复系统。如何向子(回复)消息显示父(引用)消息

php - 如何在呈现给可查看网页的 .php 文件中编写 php

php - 获取最后修改的目录

php - Mysql查询插入多个表相同的id

php - 填满表格的最快方法