php mysql 5星评级结构

标签 php mysql database-design

好的,我知道这不是一个独特的概念。然而,我发现的示例和教程并没有真正涵盖太多,它们都是关于这就是你所做的,上传它并完成。这在很大程度上是可以的。但是我想从头开始构建一个。

我拥有的是对产品进行投票的用户,我正试图弄清楚如何将表格正确地放在一起以支持这一点。所以我有我的用户表,我的产品表,我想从中创建 2 个新表。一个实际上是每个产品的投票,每个产品投票排名都有一个唯一的 ID,这样我就可以有第二个表,上面有评论和投票。我可以在大 table 上创建 2 的组合,是的.. 但我预见到随着 table 的增长会出现问题。所以我宁愿将 2 分开。我想做的另一件事是密切关注 10 个不同的等级选择。 1/2 是最低的 5 是最高的,总票数超过所有选票。那么,至少为每个产品的评分存储构建一个表的最佳方法是什么。

除此之外,输入数字的最佳方式是什么?小数点?整数?我将如何计算 5 星概念。

最佳答案

三个表(我假设您已经有两个):

users (id, etc...)
products (id, etc...)

votes (userId, productId, rating, comments)

rating 可以是 SMALLINT 类型。这为您提供了 0-255 的范围,您可以将其视为用户分数的“十倍”。例如:4 颗星 = 40,0.5 颗星 = 5。除非您预见到用户想要给某些东西打 3.1415 颗星,否则这应该足够了,而且比 float 列的内存效率更高。

然后,当你想求平均分时:

SELECT AVG(rating) FROM votes WHERE productId = xxx

我认为您不应该对这样的表结构有任何特殊问题。如果您非常偏执,那么是的,您可以为评论创建一个单独的表格,但是,这将是过早优化的教科书定义。

关于php mysql 5星评级结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072814/

相关文章:

database - 何时分隔数据库列含义(通用列)

php - 如何替换字符串中的占位符?

mysql - 更改 sql Developer 中的连接 url

PHP mysql PDO 连接 'user' @'@localhost'

php - 创建 SQL 查询,根据满足的条件对结果进行排序

sql-server - 在星型模式中,事实和维度之间的外键约束是否必要?

php - 在 php 中只命中一次数据库连接

php - 同一查询中的 SQL LIKE 和 NOT LIKE

php - 使用Retrofit、PHP、JSON和WAMP从Android应用程序获取Mysql数据库的信息

database - 更改数据库模型 - Sequelize