请试试这个sqlFiddle
SELECT T1.id_team as team1ID,T1.name_team as team1Name,
T2.id_team as team2ID,T2.name_team as team2Name,
CONCAT(T1.id_team,' vs ',T2.id_team) as id_vs,
CONCAT(T1.name_team,' vs ',T2.name_team) as name_vs
FROM team T1,team T2
WHERE T1.id_team < T2.id_team
ORDER BY rand()
你会得到一个5 choose 2 (10) 行
每支球队都有机会与其他 4 支球队交手。
如果您想要让第一支球队代表主场比赛的比赛,您也可以使用 sqlFiddle 进行随机化,我所做的只是选择一个随机数,然后根据该随机数混合 team1、team2
SELECT @rand := rand() as randValue,
IF (@rand > 0.5,T1.id_team,T2.id_team) as team1ID,
IF (@rand > 0.5,T1.name_team,T2.name_team) as team1Name,
IF (@rand > 0.5,T2.id_team,T1.id_team) as team2ID,
IF (@rand > 0.5,T2.name_team,T1.name_team) as team2Name,
IF (@rand > 0.5,CONCAT(T1.id_team,' vs ',T2.id_team),
CONCAT(T2.id_team,' vs ',T1.id_team)) as id_vs,
IF (@rand > 0.5,CONCAT(T1.name_team,' vs ',T2.name_team),
CONCAT(T2.name_team,' vs ',T1.name_team)) as name_vs
FROM team T1,team T2
WHERE T1.id_team < T2.id_team
ORDER BY rand()
如果您希望每支球队有一些客场比赛和一些主场比赛(让一支球队代表主场比赛),例如在这种情况下,每支球队将有 2 场主场比赛和 2 场客场比赛。你可以试试这个sqlFiddle
SELECT @row := @row+1 as randValue,
IF (MOD(@row,2)=0,T1.id_team,T2.id_team) as team1ID,
IF (MOD(@row,2)=0,T1.name_team,T2.name_team) as team1Name,
IF (MOD(@row,2)=0,T2.id_team,T1.id_team) as team2ID,
IF (MOD(@row,2)=0,T2.name_team,T1.name_team) as team2Name,
IF (MOD(@row,2)=0,CONCAT(T1.id_team,' vs ',T2.id_team),
CONCAT(T2.id_team,' vs ',T1.id_team)) as id_vs,
IF (MOD(@row,2)=0,CONCAT(T1.name_team,' vs ',T2.name_team),
CONCAT(T2.name_team,' vs ',T1.name_team)) as name_vs
FROM team T1,team T2,(SELECT @row:=0)variable
WHERE T1.id_team < T2.id_team
ORDER BY rand()