如何存储评级系统的 ID?

Posted

技术标签:

【中文标题】如何存储评级系统的 ID?【英文标题】:How to store ids for a rating system? 【发布时间】:2012-04-03 04:10:04 【问题描述】:

全部

我需要有关如何将评估者的 ID 存储在 mysql 数据库中以便在 php 脚本中使用它的快速帮助。喜欢 我有一个 php 星级评分脚本,我希望当有人对个人资料进行评分时,他/她的 id 应该存储在数据库中,以检查他们是否已经投票。如何将其与其他评估者个人资料 ID 一起存储在单个列中。数据库结构是这样的

    user_id | rated_value | rated_count | raters_id

这里的 user_id 是正在评分的配置文件的 ID rated_value 是所有投票的总价值 rated_count 是对特定配置文件进行评级的总费率数。 而raters_id 是对该个人资料进行评分的所有评分者的ID。

现在我想检查配置文件 ID 是否已使用 php 对配置文件进行评级。我听说过逗号分隔的 id 列表,但这是个好主意。如果我使用逗号分隔列表,如果 id 已被评为配置文件,我如何检查 php。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您只需要 3 列:

user_id | rated_value | rater_id

您必须在此处存储每个评分,这样您甚至可以告知用户他过去评分了多少星。

要获得user_id = 1 的总评分,请在 MySQL 中使用聚合函数和分组:

SELECT 
    AVG(rated_value) as average_rating, 
    COUNT(*) AS number_of_votes 
FROM 
    user_rating 
WHERE
    user_id = 1
GROUP BY
    user_id

要检查rater_id = 3 是否评价user_id = 1 使用简单查询

SELECT rated_value FROM user_rating WHERE user_id = 1 AND rater_id = 3

并检查它是否返回任何结果

【讨论】:

但我仍然可以将 rater_id 存储在数据库中,因为会有很多 id 会对配置文件进行评分 在我的解决方案中,user_rating 中的每一行都代表每次投票,因此如果两个用户对user_id=1 进行评分,那么将有两行带有user_id=1 并且它们都将具有不同的rater_id 好的,但是您能否提供一个关于仅存储rater_id 的不同表的想法。有可能吗? 是的,这是可能的,你应该能够从我的回答中弄清楚。

以上是关于如何存储评级系统的 ID?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用表连接的情况下计算按 ID 分组的匹配评级?可能吗? MYSQL?

如何从 Android 的评级栏中删除填充? [复制]

如何在电影评级推荐系统中为我的模型准确度应用标准化均值绝对值::

在 SQLAlchemy 中引用同一表列的多个外键

PHP 贝叶斯评级 - 加权投票评级系统

symfony 中的子查询