为用户及其评级创建数组

时间:2012-03-25 23:12:10

标签: php mysql arrays

我在获取用户评分数组时遇到问题。场景是,我有一个比较两个数字数组的函数,并计算它们使用余弦相似性的相似程度。

我想用它来计算从一个用户到数据库中x个其他用户的评级的相似性,找到具有最相似评级的用户。

与此相关的两个表是电影和评级。与Film相关的行是filmID,并且评级具有行filmID,userID和评级。例如:

filmId   userID   rating
1        1        3
1        3        4
2        1        2
3        1        2
2        3        3

所以对于用户1,我想要一个数组$ user1 [3,2,2]和用户3 $ user3 [4,3,0] 请注意,在用户3的数组中,他们未评级的电影现在为零。然后将这些数组传递给函数以计算相似性。

我不知道如何从我拥有的表中获取用户数组。我写了一些代码,但我很难过。到目前为止,我有:

$users = mysql_query("SELECT * FROM user");
$ratings = mysql_query("SELECT * FROM ratings");

while ($userRow = mysql_fetch_assoc($users)) {
    $similarCheck = mysql_query("SELECT * FROM ratings WHERE userID =".$userRow['userID']);
    $similarArray = mysql_fetch_assoc($similarCheck);
    $count = 0;
    while ($similarArray = mysql_fetch_assoc($similarCheck)){
        $count++;
    }   
    for ($i=0; $i < $count; $i++){
    $user1 = array();
    $user1[$i] = $similarArray['rating'];   
    }       
}   

感谢我收到的任何帮助。如果您需要任何进一步的信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

你实际上并没有对你的查询做任何事情:

while ($similarArray = mysql_fetch_assoc($similarCheck)){
    $count++;
}  

这段代码只是循环遍历查询结果,并将每一行分配给一个变量,然后一遍又一遍地重写。当循环退出时,你将为$ similarArray分配一个FALSE值,因为当没有更多的结果时,mysql_fetch调用会返回一个布尔值false。

然后尝试在另一个循环中使用此布尔值false作为将抛出各种警告的数组。

你很可能想要这样的东西:

$similarCheck = mysql_query("SELECT * FROM ratings WHERE userID =".$userRow['userID']) or die(mysql_error());
$similarArray = array();
while($row = mysql_fetch_assoc($similarcheck)) {
     $similarArray[] = $row['rating'];
}