【问题标题】:How to combine two results?如何结合两个结果?
【发布时间】:2014-09-23 16:27:41
【问题描述】:

如何在同一行中显示这两个查询的结果。类似于 17/8(杀戮/死亡)。 我有两个疑问,首先:

$result1 = mysql_query("SELECT PlayerTable.Player AS 'Player', COUNT(CASE WHEN PlayerTable.InitiatorGroupCat = 'AIRPLANE' THEN PlayerTable.InitiatorGroupCat END) AS Airplane
FROM
(
    SELECT HitTbl.InitiatorPlayer AS 'Player', DeadTbl.InitiatorGroupCat
    FROM 
        (
        SELECT *
        FROM stats
        WHERE (EVENT = 'S_EVENT_PILOT_DEAD')
        AND InitiatorGroupCat != ''
        ) AS DeadTbl
    JOIN
        (
        SELECT *
        FROM stats
        WHERE EVENT = 'S_EVENT_HIT'
        ) AS HitTbl
    ON DeadTbl.InitiatorID = HitTbl.TargetID
    WHERE HitTbl.Time IN 
        (
        SELECT MAX(TIME)
        FROM stats
        WHERE EVENT = 'S_EVENT_HIT'
        GROUP BY TargetID
        )
    GROUP BY DeadTbl.InitiatorID,DeadTbl.Time
    ORDER BY DeadTbl.Time ASC
) AS PlayerTable
GROUP BY PlayerTable.Player
ORDER BY Airplane DESC
");

//return the array and loop through each row
$i = 1;
while ($row2 = mysql_fetch_assoc($result1))
{
?>
   <tr valign="top">
    <td align=center><?php echo $i ++; ?>.</td>
    <td>            <?php echo $row2['Player'];?></td>
    <td align=center><?php echo $row2['Airplane'];?></td>
  </tr>

第二次查询:

$result2 = mysql_query("SELECT InitiatorPlayer, COUNT(CASE WHEN InitiatorGroupCat = 'AIRPLANE' THEN InitiatorGroupCat END) AS Deaths
FROM stats
WHERE (EVENT = 'S_EVENT_DEAD' OR EVENT = 'S_EVENT_PILOT_DEAD' OR EVENT = 'S_EVENT_EJECTION')
AND InitiatorGroupCat != ''
GROUP BY InitiatorPlayer
ORDER BY Airplane DESC");    

两个查询都有效,但我需要第二个查询的结果显示在表单中的第一个行中:

1.| Player | 17/8 (8 is result from second query)

这是组合(第一个查询中的新列除以“/”):

<?php echo $row2['Airplane']. " / ".$row2['Deaths'];?>

【问题讨论】:

  • 为什么不直接通过表中的主键加入第二个查询?

标签: php mysql row


【解决方案1】:

这样解决:

<?php
$result1 = mysql_query("SELECT PlayerTable.Player AS 'Player', COUNT(CASE WHEN PlayerTable.InitiatorGroupCat = 'AIRPLANE' THEN PlayerTable.InitiatorGroupCat END) AS Airplane
FROM
(
    SELECT HitTbl.InitiatorPlayer AS 'Player', DeadTbl.InitiatorGroupCat
    FROM 
        (
        SELECT *
        FROM stats
        WHERE (EVENT = 'S_EVENT_PILOT_DEAD' OR EVENT = 'S_EVENT_DEAD' )
        AND InitiatorGroupCat != ''
        ) AS DeadTbl
    JOIN
        (
        SELECT *
        FROM stats
        WHERE EVENT = 'S_EVENT_HIT'
        ) AS HitTbl
    ON DeadTbl.InitiatorID = HitTbl.TargetID
    WHERE HitTbl.Time IN 
        (
        SELECT MAX(TIME)
        FROM stats
        WHERE EVENT = 'S_EVENT_HIT'
        GROUP BY TargetID
        )
    GROUP BY DeadTbl.InitiatorID,DeadTbl.Time
    ORDER BY DeadTbl.Time ASC
) AS PlayerTable
GROUP BY PlayerTable.Player
ORDER BY Airplane DESC
");
 $result2 = mysql_query("SELECT InitiatorPlayer,  COUNT(CASE WHEN InitiatorGroupCat = 'AIRPLANE' THEN InitiatorGroupCat END) AS Deaths
    FROM stats
    WHERE (EVENT = 'S_EVENT_PILOT_DEAD' OR EVENT = 'S_EVENT_DEAD')
    AND InitiatorGroupCat != ''
    GROUP BY InitiatorPlayer");
//return the array and loop through each row
//return the array and loop through each row
$i = 1;
while (($row2 = mysql_fetch_array($result1)) && ($row1 = mysql_fetch_array($result2)))
{
?>
   <tr valign="top">
    <td align=center><?php echo $i ++; ?>.</td>
    <td>            <?php echo $row2['Player'];?></td>
    <td align=center><?php echo $row2['Airplane']. " / " .$row1['Deaths'];?></td>
  </tr>

这是一把钥匙:

while (($row2 = mysql_fetch_array($result1)) && ($row1 = mysql_fetch_array($result2)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2010-11-23
    • 2010-09-24
    • 2020-06-16
    • 1970-01-01
    • 2022-07-06
    • 2012-09-01
    相关资源
    最近更新 更多