mysql选择facebook上的记录';s饲料

mysql选择facebook上的记录';s饲料,mysql,sql,Mysql,Sql,我认为这是一个很有挑战性的问题 我有一个“用户”表: 我有一个位置表,用于存储用户位置: USERID | location 我有一个用户兴趣表: USERID | interests (comma-separated IDs of the INTERESTS table ) 兴趣: interest_ID | interest_name 职位_ post_ID | userPosting | description | post_datetime 我现在需要创建类似于Facebook的

我认为这是一个很有挑战性的问题

我有一个“用户”表:

我有一个位置表,用于存储用户位置:

USERID | location
我有一个用户兴趣表:

USERID | interests (comma-separated IDs of the INTERESTS table )
兴趣:

interest_ID | interest_name
职位_

post_ID | userPosting | description | post_datetime
我现在需要创建类似于Facebook的feed的东西,在这里我选择与我最相似的用户的帖子,同时考虑到用户的位置和兴趣

我应该选择与我“相似”的用户插入的最后10篇文章(在我所在的位置和/或与我最感兴趣的人)

此外,这应该有某种“优先权”:

  • 我根据自己的兴趣选择我所在位置的用户帖子

  • 如果记录太少,我会在同一个位置添加一些用户的帖子,这些帖子有一些共同的兴趣

  • 如果还不够的话,我会在我的位置包括用户的帖子

这还不够,应该在时间的基础上完成:我每20分钟选择10个最相关的帖子


我知道这很复杂,希望有人能给我指出正确的方向。谢谢你

这个问题有几个部分需要重新思考

首先是“相似”部分。在MySQL中,实现这一点几乎只有一种方法,即如果一个位置是另一个位置的一部分,比如“York”是“New York”的一部分,那么您可以发现“New York”与“York”类似。现在,如果你有一些关于位置的其他数据,如地质坐标或一个地区或州的一般区域,那么你可以将相似性定义为“同一州的城镇”

兴趣的相似性可能更简单——你可以知道两个人之间有多少兴趣匹配。为了简化此操作,您应该将兴趣表组织为长格式,这意味着表结构如下:

USERID_1 | INTEREST_1
USERID_1 | INTEREST_2
etc
至于构建实际的查询,您应该一步一步地进行

1) 让我们假设我们尝试使用用户ID
userID
为当前用户生成结果。由于连接是通过位置和兴趣进行的,我们应该首先查询当前用户的位置和兴趣

2) 获取当前用户位置并根据您决定如何定义“相似”来查询具有相似位置的用户。如果您设法定义了一个相似性度量,那么也可以查询它。我的意思是“在同一个国家比在同一个大陆更相似”。保存通过这种方式找到的用户

3) 对当前用户兴趣执行相同操作,并保存找到的用户

4) 合并两个列表,可能根据相似性度量,并保存生成的用户列表

5) 根据此列表查询帖子,从中选择10篇。将它们与当前用户id和时间戳一起保存到新表中。下次启动此过程时,首先检查新表,查看自为当前用户生成此列表以来是否已过20分钟-如果已生成新列表,则使用表中的列表


它实际上并不像听起来那么复杂:)

你有什么查询需要处理吗?到目前为止你尝试了什么方法?@KayNelson我没有查询引擎,我认为比较用户位置部分很容易。我在比较用户兴趣时遇到问题,因为它们是两个逗号分隔的ID,我需要优先考虑具有共同的mosts值的用户。我不知道如何进行基于时间的选择(每20分钟发布10篇最相关的帖子)。非常感谢您的帮助。非常感谢。
USERID_1 | INTEREST_1
USERID_1 | INTEREST_2
etc