你如何找到并列出与SQL或PHP稳定的室友匹配?

Keb*_*man 6 php mysql

先决条件

我有两张桌子.一个表中的人员列表,以及他们如何在外键查找表中彼此偏好.第一个表只是人员列表.另一个是他们都列出了一些他们宁愿作为室友的人.

表人:

  • 有身份证,姓名和姓氏等的人员名单

表选择:

  • 选择者名单(FK人员ID)
  • 所选名单(FK人员ID)

如何列出与SQL(或PHP)匹配?也就是说,如果一个人也在他想要作为室友的人名单上?基本上你有一个选择列表的选择器.你如何检查选择器是否也在他或她选择的一个列表中?

基本上我想要一个包含每个稳定匹配的报告,也就是选择器也在他或她所选择的至少一个列表中.

我猜一个for循环会做的伎俩,但你怎么会把第一次迭代放在一起?其余的循环少得多?

dev*_*ler 5

加入解决方案:

SELECT
    r1.name as name1,
    r2.name as name2
FROM
    roommate r1
JOIN
    roommate_pair rp1 ON r1.id = rp1.chooser_id
JOIN
    roommate r2 ON r2.id = rp1.choosen_id
JOIN
    roommate_pair rp2 ON r2.id = rp2.chooser_id
WHERE
    rp2.choosen_id = r1.id
GROUP BY
    CONCAT(GREATEST(r1.id,r2.id),'-',LEAST(r1.id,r2.id))
Run Code Online (Sandbox Code Playgroud)

最后一个GROUP BY是删除交换列中的重复匹配.工作SQL小提琴