2012-01-31 55 views
1

好的,我知道这不是一个独特的概念。然而,我发现的例子和教程并没有真正涵盖它们的全部内容,就是你所做的,上传和完成。对很多范围来说都是可以的。不过,我想从头开始构建一个。php mysql 5星评级结构

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

那除了最好的方法把数字放在什么?小数点?整数?我将如何计算5星级的概念。

+0

投票有原评论者的评论吗?你为什么用单个表来保持什么是明确的1:1关系? – 2012-01-31 00:29:35

+0

我期望随着时间的推移表格会变得非常大,并且预见查询时间的问题,我希望保持每个产品的投票和对他们的评论分开,并将产品数据分开 – chris 2012-01-31 01:29:25

回答

3

三表(其中两个我假设你已经有了):

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 

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

+0

好的,如果这是按每个说明来管理它的方式,那么最好的方法是什么?它会是一个例子1-5的评分除以总票数 – chris 2012-01-31 01:30:57

+1

你说AVERAGE。但它应该是MySQL的'AVG'。 – AlexioVay 2017-06-29 22:02:12