我在表上执行选择时遇到问题,但使用另一个表的结果来过滤可能性。
我有一个玩家结果表(玩家ID,胜利,亏损,平局,积分),并且比赛的回合在另一个表中(圆形id,锦标赛ID,玩家1 id,玩家2 id和表id)
我一直试图获得一个选择声明来检查tournamentround表并阻止玩家玩前面的对手(比如瑞士锦标赛),但我遇到了这样一个事实,那就是它选择的第二个玩家可能会被选中为另一个球员。
即p1播放p2和p3,但不播放p4或p5,当选择发生时,它将p1分配给p4,但是当它到达p4时,它将p4分配给p2。
关于如何防止这种情况的任何想法?
示例选择:
SELECT * FROM playerresults WHERE ((SELECT pid FROM playerresults) != (SELECT p1id FROM tournamentrounds))
任何建议都将不胜感激
答案 0 :(得分: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
查询。