该图像显示了我的表的结构。第一行表示tutorB 给studentD 10 分。第二行表示tutorE还没有给studentD打分。
如何生成下表?我在 stackoverflow.com 中引用了另一篇文章。MySQL中的协同过滤?然而,我仍然很困惑。
从上图中,o表示推荐,大于等于7;x 表示不推荐,比率小于 7。
例如,tutorB 给 studentD 10 分,因此,从图片的第二行,我们可以看到 StudentD 列有一个“o”。(而其他三行的数据现在只是随机分配的。)
现在,如果我想为导师 A 推荐一个学生。导师 B、C 和 D 的等级(或相似度)分别为 0,2 和 3。
如何生成 SQL 以便能够将比率转换为“o”和“x”并计算排名。而且,最重要的是,我想从图片中向 TutorA 推荐 StudentH。
我应该如何修改上一篇文章中的代码?而且,如果我上面提到的想法正确?
谢谢。
==================================================== ===========================
已编辑
我在数据库中有以下数据。第一行表示 10 分是导师 A 给学生 C 的。
为了更好地理解,我将其转换为另一个表。v
是速率的值。
create temporary table ub_rank as
select similar.NameA,count(*) rank
from tbl_rating target
join tbl_rating similar on target.NameB= similar.NameB and target.NameA != similar.NameA
where target.NameA = "tutorA"
group by similar.NameA;
select similar.NameB, sum(ub_rank.rank) total_rank
from ub_rank
join ub similar on ub_rank.NameA = similar.NameA
left join ub target on target.NameA = "tutorA" and target.NameB = similar.NameB
where target.NameB is null
group by similar.NameB
order by total_rank desc;
select * from ub_rank;
上面的代码引用自Collaborative filtering in MySQL? . 我有几个问题。
SQL中有2个部分。我可以从第一部分中选择 *。但是,如果我如上图输入整个SQL,系统提示
Table 'mydatabase.ub' doesn't exist
我应该如何修改代码?代码将找到相似之处。我应该如何更改代码,如果标记小于 7,则更改为
o
,否则更改为v
,并计算给定用户的相似度?