これに似た問題があります --> MySQL データベースのペアを一致させますが、それでも少し異なります。
高校の新入生と他のすべての生徒 (2 年生、3 年生、4 年生) という 2 つのグループの生徒を考えてみましょう。到着した新入生と経験豊富な学生をバディとしてマッチさせたいと考えています。すべての学生は、一致基準として使用したいスコアが表示されるアンケートに記入しました。一致したペアのスコアは最大 10% 異なる場合がありますが、できるだけ近い値にする必要があります。最後に、スコアが単に一致しない場合、バディのない新入生がいる可能性があります。もちろん、新入生よりも非新入生の方が多いため、すべての学生が一致するわけではありません.
ソース テーブルは次のようになります。
Student ID | Group | Score
1 | Freshman | 10
2 | Freshman | 15
3 | Non-Freshman | 11
4 | Non-Freshman | 16
5 | Non-Freshman | 30
...
この場合、1+3
and2+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
与えられたシナリオの 2 つの特徴により、問題が複雑になります。
可能な組み合わせが複数ある場合でも、すべての新入生は、他の (新入生ではない) 学生 1 人だけと一致するものとします。
バディ ペア マッチが作成されると、これらの生徒は他のマッチに参加できなくなります。
その間、私は 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 の同じ学生が複数回一致する場合があります。ただし、すべての生徒はパートナーを 1 人しか持てません。次に、ランダムな一致が選択されます。私が望むのは、スコアの差ができるだけ少ない試合です。
どんな助けでも大歓迎です