从MySQL存储和检索


Storing and Retrieving from MySQL

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

提交的值被输入到数据库"lr"的一个名为"attributes"的表中,该表具有以下列。

// 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的总体评分?

您可以通过保持运行平均值而不是每个人提交的确切分数来使数据更加简洁。你只需要把所有的评分加成一个连续的总数,然后把你的除法计数器增加4(因为有四个评分)。

那么您的查询将只查询RunningTotalRatings。

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

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