从MySQL存储和检索

时间:2015-03-20 05:45:16

标签: php mysql

我有一个音乐网站,人们可以访问艺术家的页面,听他们的音乐,并使用带有四个滑块的表格提交艺术家的评级(0-100)以下属性:流程,隐喻,魅力和文字游戏。然后,每个属性的平均值显示在艺术家页面上。

将提交的值输入名为' attributes'的表中。数据库' lr'以下列。

// The database connection has already been established.



  id(AUTO INCREMENTED)<br>
    userid (Corresponding to the id of the artist who was viewed)<br>
    Flow (INT of 3)
    Metaphors (INT of 3)
    Wordplay (INT of 3) 
    Charisma (INT of 3) 

我的第一个问题是:什么是更简洁的方式,我可以利用页面访问者提交的所有值?我可以将值平均为一行值存储在表中,每个用户ID随每次提交而变化,而不是与一个用户对应的数百个值的冗长列表?如果是这样,怎么样?

如果有一种简单的方法可以改变我第二个问题的动态。


其次,

在制作列表排名网站顶级艺术家的一系列步骤的第一部分中,我需要检索所有艺术家的总得分:Overall Score = ( AVG(Flow)+ AVG(Metaphors) + AVG(Wordplay) + AVG(Charisma) / 4 ).我尝试了以下查询返回每个用户ID的总分。

"SELECT ((AVG(Wordplay) + AVG(Metaphors) + AVG(Charisma) + AVG(Flow)) / 4 ) FROM attributes GROUP BY userid";

当我这样做时,它只获取一个用户ID的数组。我能获得每个用户ID的总体评级的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以通过保持运行平均值而不是每个人提交的确切分数来使您的数据更简洁。您只需要将所有等级添加到运行总计中,然后将分频计数器增加4(因为有四个等级)。

然后您的查询将只查询RunningTotal / TotalRatings。

要回答问题的第二部分,您需要选择用户ID和平均值。

SELECT userid, ((AVG(Wordplay) + AVG(Metaphors) + AVG(Charisma) + AVG(Flow)) / 4 ) FROM attributes GROUP BY userid