我正在制作一个网络应用程序来创建锦标赛,并且由于我在这个项目过程中学习了 PHP,所以我的技能可能不是最好的。
我的数据库中有一个标识符day2_semifinal
或day2_additional
,它基本上标识了半决赛的类型。
所以我的第一个查询是:
$numberquery = mysql_query("
SELECT *
FROM tourneyplayers
INNER JOIN results
on (resultid=r_id)
INNER JOIN players
ON (p_id=playerid)
INNER JOIN tourneys
on (T_Id=tourneyid)
WHERE tourneyid='$tourneyid' and
in_day2 = 1 and
day2_semifinal IS NOT NULL
GROUP BY day2_semifinal
ORDER BY agegroupid",$connection);
这将为我提供所有半决赛组,我将迭代它们并查询组中的所有玩家:
$semigroup = $group['day2_semifinal'];
$playerQuery = mysql_query("
SELECT *
FROM tourneyplayers
INNER JOIN results
on (r_id=resultid)
INNER JOIN players
on (p_id=playerid)
WHERE tourneyid='$tourneyid' AND
day2_semifinal = '$semigroup' and
in_day2 = 1
ORDER BY day2startplace",$connection);
现在,在我创建表格并回显 day2_semifinal
玩家查询的所有数据后,我运行另一个查询:
$numberquery = mysql_query("SELECT * FROM tourneyplayers INNER JOIN results on (resultid=r_id) INNER JOIN players ON (p_id=playerid) WHERE tourneyid='$tourneyid' and in_day2 = 1 and day2_additional_nosemi IS NOT NULL AND day2_additional_nosemi <> 0 GROUP BY day2_additional_nosemi ORDER BY agegroupid",$connection);
这与第一个非常相似,唯一不同的是 day2_semifinal
标识符已更改为 day2_additional
。在该查询之后,我将再次迭代 day2_additional_nosemi
组并查询其中的玩家:
$additionalgroup = $group['day2_additional_nosemi'];
$playerQuery = mysql_query("SELECT * FROM tourneyplayers INNER JOIN results on (r_id=resultid) INNER JOIN players on (p_id=playerid) WHERE tourneyid='$tourneyid' AND day2_additional_nosemi = '$additionalgroup' and in_day2 = 1 ORDER BY day2startplace",$connection);
现在可以了,但这会产生排序问题,因为第一个查询按 agegroupid
对它们进行排序,但仅限于 day2_semifinal
中的玩家(我想有 day2_additional
玩家与 day2_semifinal
一起订购)。如果我运行另一个查询,则先前的数据已被回显并且排序不正确。我如何连接两个 $numberquery
查询以便在它们之后也选择玩家?
最佳答案
我正在回答我自己的问题,因为我找到了一种方法来做到这一点。我所做的是从两个查询中删除了 ORDER BY 并创建了一个新查询,将这两个查询与 UNION 连接起来:
SELECT * FROM (
SELECT *
FROM tourneyplayers as tp1
INNER JOIN results as r1
on (tp1.resultid=r1.r_id)
INNER JOIN players as p1
ON (p1.p_id=tp1.playerid)
WHERE tp1.tourneyid=96 and
tp1.in_day2 = 1 and
r1.day2_semifinal IS NOT NULL
GROUP BY r1.day2_semifinal
UNION ALL
SELECT *
FROM tourneyplayers as tp2
INNER JOIN results as r2
on (tp2.resultid=r2.r_id)
INNER JOIN players as p2
ON (p2.p_id=tp2.playerid)
WHERE tp2.tourneyid=96 and
tp2.in_day2 = 1 and
r2.day2_additional_nosemi IS NOT NULL AND
r2.day2_additional_nosemi <> 0
GROUP BY r2.day2_additional_nosemi
) t ORDER BY t.agegroupid;
关于php - 合并两个mysql组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43361862/