【发布时间】:2013-03-26 02:16:22
【问题描述】:
图片显示了我的表的结构。第一行表示tutorB 给studentD 10 分。第二行表示tutorE还没有给studentD打分。
如何生成下表?我在 stackoverflow.com 中引用了另一篇文章。 Collaborative filtering in 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,并计算给定用户的相似度?
【问题讨论】:
-
表格中的最后一行是什么意思?这是StudentD给TutorB的“评分”吗?另外,你的桌子上有多少学生?您真的想要为每个现有学生提供一个专栏吗?
-
@BellevueBob 是的,就是StudentD给TutorB的“评分”。上面的第二张图片显示了推荐学生部分,我使用了与第一张图片前两行相似的数据。另一方面,当我执行 Recommendating Tutors 部分时,我将使用 DB 表数据的第三行到最后一行的数据。对于学生的数量,我还没有考虑好。我想我会先尝试弄清楚表格,然后再尝试限制大小。