Найти повторные битвы

У меня есть одна таблица со следующими полями:

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 игроков, в каждой битве может быть только победитель и проигравший (нет ничьих)

как мне найти все повторяющиеся битвы? я не хочу найти все повторяющиеся битвы одного игрока, я хочу знать все повторяющиеся битвы всех игроков... я знаю, что я могу сделать рекурсивную функцию в 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

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
    )

Попробуй это:

SELECT b1.battle_id,
       b1.winner,
       b1.looser 
FROM   battles as b1
group  by b1.battle_id, b1.winner,  b1.looser 
having count(*)>=2
Другие вопросы по тегам