0

次のフィールドを持つテーブルが 1 つあります。

battle_id, winner, looser  
 1  200    44  
 2   55   366  
 3   44   200  
 4  123   200  
 5  200    44  
 6   55   366  
 7  177   205  
 8  188   211  
 9  366    55  
10   55   366

現在、約 1300 のレコード (小さい) があり、約 400 人のプレイヤーがいて、各バトルには勝者と敗者しか存在できません (引き分けはありません)。

繰り返される戦闘をすべて見つけるにはどうすればよいですか?1 人のプレイヤーが繰り返し行ったすべての戦闘を見つけたいわけではありません。すべてのプレイヤーが繰り返し行ったすべての戦闘を知りたいのです...すべての戦闘を反復して割り当てる再帰関数を php で作成できることはわかっています。マトリックスに、しかしただの楽しみのために... mysqlでのみそれを行う方法はありますか?

また、テーブルを最適化して、繰り返される戦闘をより迅速に見つけるにはどうすればよいですか?

よろしく

編集:

たとえば、クエリに次のように表示したい:

battle_id, winner, looser  
 1  200    44  
 2   55   366  
 3   44   200  
 5  200    44  
 6   55   366  
 9  366    55  
10   55   366
4

2 に答える 2

2

これは機能するはずです。自己結合を使用すると、多くの重複したエントリが発生する可能性があります

SQLFIDDLE

SELECT
    t1.battle_id,
    t1.winner,
    t1.loser
FROM
    your_table t1
WHERE
    EXISTS (
             SELECT
                 1
             FROM
                 your_table t2
             WHERE
                 ( ( t1.winner = t2.winner
                 AND t1.loser = t2.loser )
                 OR ( t1.loser = t2.winner
                 AND t1.winner = t2.loser ) )
                 AND t1.battle_id <> t2.battle_id
    )
于 2013-11-06T04:52:23.960 に答える