1

我一直在做很多关于评级系统的搜索和阅读,但找不到我想要实现的解决方案......

我有一个网站,用户一旦登录,就可以提交产品。现在我希望其他用户能够根据 3 个不同的标准对这些产品进行评分。我正在使用 php 和 mySQL 数据库来存储所有运行良好的信息,我只是不确定现在如何合并评级。

目前我有一个 PRODUCTS 数据库,该数据库根据其类别保存各种表格。下面是一个表格示例:

TOASTERS
---
ID (auto-incrementing)
Brand
Set
Number
Name
Edition
Image (stores the location of the image the user uploads)

然后,任何用户都可以根据 3 个标准(质量、价格、美学)对表中的该行进行评分(满分 10 分)。每个标准的用户平均值显示在每个产品页面上,但我想存储每个用户的个人评分,以便我可以在他们的个人资料页面上显示他们评分的简短历史记录。或者在主页上获得最新用户评分的实时信息。

我想做的很像awwwwards.com。(请参阅页面右下角以查看我正在谈论的实时提要)

提前致谢!

4

2 回答 2

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,引用表 PRODUCTS

VOTES
---
productID (FK to PRODUCTS)
userID (FK to USERS)
Quality    
Price     
Aesthetic
VoteDateTime

如果确实比投票历史查询更频繁地查询整体产品评级,那么作为优化,您可以将字段 VoteCount、AvgQuality、AvgPrice、AvgAesthetic 添加到 PRODUCTS 表中,正如srdjans已经假设的那样。您可以通过在表 VOTES 上触发或在 PHP 代码中手动更新此额外字段。

于 2013-10-29T14:38:33.033 回答
0

创建单独的表来存储用户个人评分(主键、用户 ID、产品 ID 和评分)。在“产品”中创建附加字段以存储平均值。每次一些用户对某个产品进行评分时,您都会在“评分”表中插入记录,然后再次计算给定产品的平均值,并更新产品中的行。这样做您将可以轻松访问评级,并且您可以分析用户的个人评级。

Ps - 您可能还希望存储有多少用户评价了某些产品。

于 2013-10-29T14:28:21.790 回答