如何按距离排序?

时间:2015-12-12 16:38:14

标签: sql

我正在构建一个应用程序,根据他们到达同一个地方的频率,向其他人推荐人们。
因此,对于给定的人A(您想要提出建议的人),我有一张包含所有其他人的表格以及他们去过某个地方的时间。即,我明白了:

idPerson     |     idPlace     |     nbTimesPersonWent   |  nbTimesPersonAWent
    10       |       1         |         3               |        10
    11       |       2         |         1               |        22
    12       |       1         |         11              |        10
    13       |       3         |         8               |        2

我所挣扎的是找到这些idPerson中的哪一个是最好的"推荐给A的人。

有没有办法(最好是纯SQL),从"更接近"值nbTimesPersonWentnbTimesPersonWent至"较少关闭"值?

1 个答案:

答案 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

相关问题