php - 合并两个mysql组查询

标签 php mysql

我正在制作一个网络应用程序来创建锦标赛,并且由于我在这个项目过程中学习了 PHP,所以我的技能可能不是最好的。

我的数据库中有一个标识符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 查询以便在它们之后也选择玩家?

最佳答案

我正在回答我自己的问题,因为我找到了一种方法来做到这一点。我所做的是从两个查询中删除了 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/

相关文章:

mysql - 将随机数插入到 MYSQL 中的表中

MySQL 错误 1264 (22003) : Out of range value for column

php - 邮政编码数据库 Web 开发 PHP、MYSQL

PHP SQLite3 - 绑定(bind)值

php - 你将如何优化以下 mysql 查询

mysql - 当算术运算符存储在SQL数据库中时,如何在SQL查询中执行算术运算

mysql - 加密的电子邮件 ID 不区分大小写 MySQL

php - Outlook 链接预览中断 "one time URL"

php - 查询返回基于类别的重复产品

PHP 无法在服务器上运行