与MySQL配对

时间:2012-12-20 13:43:44

标签: mysql

我遇到类似这个的问题 - > Match pairs in a MySQL database,但仍然有点不同。

考虑两组学生,新生和高中的所有其他学生(大二,大三和大四)。您希望将到达的新生与更有经验的学生作为伙伴进行匹配。所有学生都填写了一份问卷,其中提出了您希望用作匹配标准的分数。匹配对的分数可能相差10%,但应尽可能接近。最后,如果分数根本不匹配,可能会有没有伙伴的新生,并且由于非新生比新生更多,当然不是每个学生都会匹配。

您的源表如下所示:

  Student ID | Group        | Score
    1        | Freshman     | 10
    2        | Freshman     | 15
    3        | Non-Freshman | 11
    4        | Non-Freshman | 16
    5        | Non-Freshman | 30
    ...

在这种情况下,1+32+4会匹配。一个完美的输出是这样的:

 Student ID    | Group        | Score | Matched Pair ID
     1         | Freshman     | 10    | 1
     3         | Non-Freshman | 11    | 1
     2         | Freshman     | 15    | 2
     4         | Non-Freshman | 16    | 2

给定方案的两个特征使问题变得棘手:

  1. 即使有多个可能的组合,每个新生也只能与另一名(非新生)学生匹配。

  2. 创建好友配对后,这些学生将无法再参加其他比赛。

  3. 与此同时,我用php脚本解决了我的问题,但是必须有办法用mysql来实现。

    当我尝试...

    select a.id, a.score, b.id, b.score from table t1 
    join table t2 on t1.score between t2.score*0.9 and t2.score*1.1 and t1.id<>t2.id
    group by a.id;
    

    ...来自表t2的同一个学生可能会多次匹配。但是,每个学生可能只有一个合作伙伴。其次,选择随机匹配。我想要的是与得分差异最小的匹配。

    感谢任何帮助

0 个答案:

没有答案