我有一个数据库,用户可以在其中输入他们的兴趣。我想找到志趣相投的人。
兴趣表的结构是interestid | username | hobby | location | level | matchinginterestids
让我们用两个用户来保持简单。
我想做以下算法
我想我需要的是某种 for 循环,它将遍历所有 joe 的兴趣,然后在每次在兴趣数据库中找到匹配项时进行更新。这在 MySQL 中甚至可能吗?
进一步的例子:
我是丹。我有3个兴趣。每个兴趣由 3 个科目组成:
其他人可能有其他兴趣
乔:
萌
现在,当我以 Dan 身份登录时,我希望查询返回以下内容:
以下是您的兴趣匹配:
--- 对猫的营养毛发感兴趣
乔对猫和营养很感兴趣
Joe 和 Moe 对 super 透镜、dna、显微镜感兴趣
萌对电影很感兴趣
该查询需要遍历 Dan 的所有兴趣,并比较 3,2,1 个主题匹配项。
我可以在 php 中循环执行此操作,但它会一直调用数据库以获取结果。我想知道是否有一种巧妙的方法可以使用单个查询或 3 个单独的查询来执行此操作,一个查找 3 个匹配项,一个查找 2 个匹配项,一个查找 1 个。
最佳答案
这对于 MySQL 绝对是可能的,但我认为您可能会以一种尴尬的方式进行处理。我将首先按如下方式构建表格:
TABLE Users ( userId, username, location )
TABLE Interests( interestId, hobby )
TABLE UserInterests( userId, interestId, level )
当用户添加兴趣时,如果之前没有添加,则将其添加到
Interests
表中,然后将其添加到 UserInterests
表中。当你想检查附近有相似兴趣的其他人时,你可以简单地查询 UserInterests
表中其他有相似兴趣的人,它已经为你提供了所有信息:SELECT DISTINCT userId
FROM UserInterests
WHERE interestId IN (
SELECT interestId
FROM UserInterests
WHERE userId = $JoesID
)
这可能可以在没有子查询的情况下以更优雅的方式完成,但这是我现在想到的。
关于MySQL 多兴趣匹配问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5906346/