我正在构建一个应用程序,根据他们到达同一个地方的频率,向其他人推荐人们。
因此,对于给定的人A(您想要提出建议的人),我有一张包含所有其他人的表格以及他们去过某个地方的时间。即,我明白了:
idPerson | idPlace | nbTimesPersonWent | nbTimesPersonAWent
10 | 1 | 3 | 10
11 | 2 | 1 | 22
12 | 1 | 11 | 10
13 | 3 | 8 | 2
我所挣扎的是找到这些idPerson
中的哪一个是最好的"推荐给A的人。
有没有办法(最好是纯SQL),从"更接近"值nbTimesPersonWent
和nbTimesPersonWent
至"较少关闭"值?
答案 0 :(得分:1)
我建议使用下表
人:
id
地点:
id
访问:
person_id, place_id, time_spent
现在,您必须选择对某个人感兴趣的人进行排序的方式a。
存在许多不同的排序函数。对于任何感兴趣的人a
,您可以根据许多不同的标准对任何其他人进行排名。例如:
f(a,b) = Sum of min_time(a,b,p) for all places p that both a and b have visited
,其中min_time(a,b,p) = minimum of the time a and b have spent at place p
f(a,b) = The number of places that both a and b have visited
两种方法的区别在于,第一种考虑在不同地方花费的时间,第二种只考虑通常访问的地方数量。与在多个地方分配时间相比,您还可以定义限制在同一地点花费大量时间的影响的功能。
如果您可以指定确切的排名标准,我将很乐意帮助您为其编写查询。
更新:以下是按第二排名标准排序的示例。也就是说,通过共同访问的地方数量:sqlfiddle.com/#!9/b56745/1/0