我在获取一组用户评分时遇到了问题。场景是,我有一个函数,它比较两个数字数组,并使用余弦相似度计算它们的相似度。
我想用这个来计算一个用户的评分与数据库中x个其他用户的评分的相似度,找出评分最相似的用户。
与此相关的两个表是电影和收视率。与电影相关的行是filmID,评级具有行filmID、userID和评级。例如:
filmId userID rating
1 1 3
1 3 4
2 1 2
3 1 2
2 3 3因此,对于用户1,我想要一个数组$user13,2,2,而对于用户3,$user34,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'];
}
} 感谢您对我的帮助。如果您需要任何进一步的信息,请让我知道。
发布于 2012-03-26 07:21:57
您实际上并没有对您的查询做任何操作:
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'];
}https://stackoverflow.com/questions/9864894
复制相似问题