dan*_*age 3 mysql loops for-loop
我有一个用户输入他们兴趣的数据库.我想找到兴趣相符的人.
兴趣表的结构是
interestid | username | hobby | location | level | matchinginterestids
让我们两个用户保持简单.
我想做以下算法
我想我需要的是某种for循环,它将循环遍历所有joe的片段,然后每次在兴趣数据库中找到匹配时进行更新.这在MySQL中甚至可能吗?
进一步举例:
我是丹.我有3个兴趣.每个兴趣由3个科目组成:
其他人可能有其他兴趣
现在,当我以Dan身份登录时,我希望查询返回以下内容:
以下是您的兴趣匹配:
---有兴趣猫营养头发
Joe对猫和营养
感兴趣Joe和Moe对superlens,dna,显微镜
感兴趣Moe对电影感兴趣
查询需要遍历Dan的所有兴趣,并比较3,2,1个主题匹配.
我可以从循环中在php中执行此操作,但它会一直调用数据库来获取结果.我想知道是否有一种狡猾的方式使用单个查询来完成它或者可能是3个单独的查询,一个查找3个匹配,一个用于2,一个用于1.
对于MySQL来说这绝对是可能的,但我认为你可能会以一种尴尬的方式解决这个问题.我将从结构化表开始,如下所示:
TABLE Users ( userId, username, location )
TABLE Interests( interestId, hobby )
TABLE UserInterests( userId, interestId, level )
Run Code Online (Sandbox Code Playgroud)
当用户添加兴趣时,如果之前没有添加兴趣,则将其添加到Interests表中,然后将其添加到UserInterests表中.当您想要检查其他具有相似兴趣的人时,您可以简单地查询该UserInterests表以查找具有相似兴趣的其他人,这些人已经为您提供了所有相关信息:
SELECT DISTINCT userId
FROM UserInterests
WHERE interestId IN (
SELECT interestId
FROM UserInterests
WHERE userId = $JoesID
)
Run Code Online (Sandbox Code Playgroud)
这可能是在没有子查询的情况下以更优雅的方式完成的,但这就是我现在想到的.