2017-04-12 115 views
0

我正在制作一个web应用程序来创建锦标赛,正如我在这个项目过程中学到的PHP一样,所以我的技能可能不是最好的。结合两个mysql组查询

我在我的数据库day2_semifinalday2_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查询以便选择后面的玩家呢?

+0

删除mysql_ *。现在为了安全起见,从php7中删除,使用mysqli_或pdo –

+0

我将在下一个项目中继续讨论这个问题,我目前仍在学习,而且我正在修改的区域不是公开的。 – Banana

+0

您的第一个查询无效,因为您在使用“GROUP BY”时选择所有列。你究竟在第一个查询中想要聚合什么? –

回答

1

我回答我自己的问题,因为我想出了一个办法来做到这一点。我做了,除去来自查询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;