我有一个数据库,用户可以在其中输入他们的兴趣。我想找到志趣相投的人。
兴趣表的结构是interestid | username | hobby | location | level | matchinginterestids让我们用两个用户来保持简单。

  • 用户 Joe 可能有 10 个不同的兴趣记录
  • 用户 greg 可能有 10 个不同的兴趣记录。

  • 我想做以下算法
  • 获取 Joe 的兴趣记录 1,并从兴趣数据库中查找匹配的爱好和位置。将任何匹配的兴趣 ID 放在匹配字段中。然后转到joe的兴趣记录2等..

  • 我想我需要的是某种 for 循环,它将遍历所有 joe 的兴趣,然后在每次在兴趣数据库中找到匹配项时进行更新。这在 MySQL 中甚至可能吗?

    进一步的例子:
    我是丹。我有3个兴趣。每个兴趣由 3 个科目组成:
  • Dan 猫,营养,毛发
  • Dan superlens,dna,显微镜
  • Dan 电影、慢动作、打斗场面

  • 其他人可能有其他兴趣
    乔:
  • 乔猫,营养,力量
  • Joe superlens,dna,显微镜


  • Moe mysql、查询、php
  • Moe 胶卷、specialfx、相机
  • Moe superlens,dna,显微镜

  • 现在,当我以 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/

    10-11 17:31