2015-05-16 1 views
0

У меня возникли проблемы с выполнением выбора на таблице, но с использованием результатов другой таблицы для фильтрации возможностей.Как проверить, сыграл ли 1 игрок другой

У меня есть таблица результатов игроков (идентификатор игрока, победы, поражения, ничьи, очки), а раунды для турнира - в другой таблице (круглый идентификатор, идентификатор турнира, идентификатор игрока 1, идентификатор игрока 2 и идентификатор таблицы).

Я пытаюсь получить инструкцию select, которая проверяет таблицу roundround и не позволяет игроку играть с предыдущими противниками (например, в швейцарском турнире), но я сталкиваюсь с тем, что игрок, которого он выбирает для второго, может быть выбранный для другого игрока.

ie p1 играл p2 и p3, но не p4 или p5, когда выбор происходит, он назначает p1-p4, но когда он добирается до p4, он назначает p4 на p2.

Любая идея о том, как предотвратить это?

Пример выбора:

SELECT * FROM playerresults WHERE ((SELECT pid FROM playerresults) != (SELECT p1id FROM tournamentrounds)) 

Любые предложения будут высоко оценены

+0

Пожалуйста, отредактируйте ваш вопрос и включите образцы данных в формате * table *, а также желаемые результаты. –

ответ

0

Если у Вас есть данный плеер, скажем @playerid, то вы можете получить игроков, которые не играли, делая что-то вроде:

select pr.* 
from playerresults pr 
where pr.pid not in (select t.pid2 from tournaments t where pid1 = @playerid) and 
     pr.pid not in (select t.pid1 from tournaments t where pid2 = @playerid) 

Если вы хотите случайный, и ваши данные не очень большие (менее нескольких тысяч строк), просто добавьте:

order by rand() 
limit 1 

по запросу.

Смежные вопросы