我在获取用户评分数组时遇到问题。场景是,我有一个比较两个数字数组的函数,并计算它们使用余弦相似性的相似程度。
我想用它来计算从一个用户到数据库中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'];
}
}
感谢我收到的任何帮助。如果您需要任何进一步的信息,请告诉我。
答案 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'];
}