php mysql 5星评级结构

时间:2012-01-31 00:26:16

标签: php mysql database-design

好的,我知道这不是一个独特的概念。然而,我发现的示例和教程并没有真正涵盖了他们所做的就是你所做的,上传和完成。哪个范围很好。但是我想从头开始构建一个。

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

除此之外,最好的方法是将数字放入?小数点?整数?我怎么算出五星级的概念呢?

1 个答案:

答案 0 :(得分:4)

三张桌子(我假设你已经有两张桌子):

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

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