我有一个问题,你可能会认为它很愚蠢,但无论如何
在制作 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/