php - mySQL 数据库 - 存储多标准评级

标签 php mysql sql database rating-system

我一直在搜索和阅读有关评级系统的大量内容,但找不到解决我想要实现的目标的方法...

我有一个网站,用户登录后可以提交产品。现在我希望其他用户能够根据 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 . (查看页面右下角以查看我正在谈论的直播)

提前致谢!

最佳答案

我认为您应该使用单个 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 代码中手动更新此额外字段。

关于php - mySQL 数据库 - 存储多标准评级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19660850/

相关文章:

mysql - 适合初学者的 Node.js 嵌套 MySQL 查询

c# - LINQ 在列表或表上更快吗?

PHP 自定义对象转换

php - 如何在不包含的情况下将变量传递给另一个 php 文件?

mysql_exceptions.OperationalError : (1045, "Access denied for user ' root' @'localhost'(使用密码:YES)“)

mysql - 具有多个 OR 的 SQL 查询的优先级

php - 如何从php/mysql中的不同表中获取特定列数据

php - 如何获得没有运输等级的产品

c++ - 在 C++ 中,如何存储 SQL 查询并对其进行排序?

mysql - 如何在mysql中获取连续第二最少的列