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