我一直在做很多关于评级系统的搜索和阅读,但找不到我想要实现的解决方案......
我有一个网站,用户登录后可以提交产品。现在我希望其他用户能够根据3个不同的标准对这些产品进行评级。我正在使用php和mySQL数据库存储所有正常工作的信息,我现在还不确定如何合并评级。
目前我有一个产品数据库,根据类别保存各种表格。这是一个表格的例子:
TOASTERS
---
ID (auto-incrementing)
Brand
Set
Number
Name
Edition
Image (stores the location of the image the user uploads)
然后,任何用户都可以根据3个标准(质量,价格,审美)对该表中的那一行进行评级。每个标准的用户平均值显示在每个产品页面上,但我希望存储每个用户的个人评级,以便我可以在其个人资料页面上显示其评级的简短历史记录。或者在主页上有最新用户评分的实时Feed。
我想做的事情与awwwwards.com非常相似。 (请参阅页面右下方以查看我正在谈论的实时进纸)
提前致谢!
答案 0 :(得分:1)
我认为您应该使用单个PRODUCTS表或至少创建PRODUCTS表并模拟它与类别表之间的继承。
如果每个类别都有一些特定的属性,那么为每个类别提供一个表可以带来一些好处,但是它可能导致编写单独的代码以使用每个表的必要性。或者,您可以使用两个表来“垂直”存储所有自定义属性:PROPERTIES(propertyID,PropertyName)
,PROPVALUES(productID,propertyID,PropertyValue)
。
如果您选择拥有多个表并模拟继承,则可以这样实现:
PRODUCTS
---
ID (auto-incrementing)
Brand
Set
Number
Name
Edition
Image
VoteCount <+
SumQuality +-updated by trigger
SumPrice |
SumAesthetic <+
TOASTERS
---
productID (PK and FK to PRODUCTS)
(toaster specific fields go here, if any)
您将能够创建表格VOTES,引用表格产品
VOTES
---
productID (FK to PRODUCTS)
userID (FK to USERS)
Quality
Price
Aesthetic
VoteDateTime
如果确实比投票历史记录更频繁地查询整体产品评级,那么作为优化,您可以将{VoteCount,AvgQuality,AvgPrice,AvgAesthetic字段 - 添加到产品表中,如srdjans已经假设的那样。您可以通过表VOTES上的触发器或PHP代码中的手动更新此额外字段。
答案 1 :(得分:0)
创建单独的表格,用于存储用户个人评级(主键,用户ID,产品ID和评级)。在“产品”中创建其他字段以存储平均值。每当某个用户评价某些产品时,您在“评级”表中插入记录,然后再次计算给定产品的平均值,并更新产品中的行。这样,您可以轻松访问评级,还可以分析用户的个人评级。
Ps - 您可能还希望存储有多少用户评价某些产品。