求和的和通过MySQL中的UNION连接并在PHP中使用ECHO显示

问题描述 投票:0回答:1

对于每个手术中心,我都建立了MySQL SUM查询,该查询总结了执行的手术程序的数量。在PHP中,我将结果显示在具有两列的表中。

现在,我要计算所有中心的SUM的SUM,并同样显示它们。

问题是,相同的echo命令的确在彼此之间显示了类似的程序性过程,但仅是SUM超过SUM的结果中的第一个(参见3。]

PHP函数代码和SQL查询代码如下:

function getGlobalAlleOPVerfahrenStratification() {
  global $oDatabase;
  $qQuery = ' 
  SELECT SUM(X1.Surgery1) AS "Surgery1" FROM (
    SELECT SUM(op.OPVerfahren = "0") AS "Surgery1"
    FROM operation op
    UNION
    SELECT SUM(op.OPVerfahren = "1") AS "Surgery1"
    FROM operation op
    UNION
    SELECT SUM(op.OPVerfahren = "20") AS "Surgery1"
    FROM operation op
  ) X1
  UNION
  SELECT SUM(X2.Surgery2) AS "Surgery2" FROM (
    SELECT SUM(op.OPVerfahren = "0") AS "Surgery2"
    FROM operation op
    UNION
    SELECT SUM(op.OPVerfahren = "1") AS "Surgery2"
    FROM operation op
    UNION
    SELECT SUM(op.OPVerfahren = "20") AS "Surgery2"
    FROM operation op
  ) X2; ';

  $rQuery = mysql_query($qQuery, $oDatabase);
  $result = array("count" => mysql_num_rows($rQuery), "result" => $rQuery);
  return $result;
}


function writeGlobalOP1OPVerfahrenStratification($rQuery) {
  if (!$rQuery) {
    $message = '<br>';
    $message .= '<b>Ungültige Abfrage:</b> ' . mysql_error() . '<br>';
    $message .= '<b>Gesamte Abfrage:</b> ' . $qQuery . '<br>';
    echo $message;
  }

  if (mysql_num_rows($rQuery) == 0) {
    $message = '<br>';
    $message .= '<p class="error">Zu diesem Zeitraum liegen noch keine Daten vor.</p> ' . mysql_error() . '<br>';
    echo $message;
  }

  //echo '<table>';
  echo '<tr>';
  echo '<th style="font-size: 30px; border-left: 6px solid blue;">';
  echo "Alle Zentren";
  echo '</th>';
  echo '<th class="data_table_r" style="font-size: 30px;">';
  echo "Summen";
  echo '</th>';
  echo '</tr>';

  while ($row = mysql_fetch_assoc($rQuery)) {
    echo '<tr>';
    echo '<td style="font-size: 30px; border-left: 6px solid blue;">';
    echo "Operation 1";
    echo '</td>';
    echo '<td class="data_table_r" style="font-size: 30px;">';
    echo $row['Surgery1'];
    echo '</td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td style="font-size: 30px; border-left: 6px solid blue;">';
    echo "Operation 2";
    echo '</td>';
    echo '<td class="data_table_r" style="font-size: 30px;">';
    echo $row['Surgery2'];
    echo '</table>';
    }
}

代替全部

echo ...

while语句后的命令,只需编写

echo $row['Surgery1'];
echo '<br />';

PHP逐个显示手术,并用回车分隔

但是,我期望的是一个表,在其左侧有两列,给出了操作名称,在其右边列出了手术数。

抱歉,但是我太愚蠢了,无法意识到这一点。

有人,请给我一个解决方案?

php mysql sum echo union
1个回答
0
投票

Union只合并不相同的行。因此,出于您的目的,工会并非在所有情况下都是正确的选择。

所以有这张桌子

CREATE TABLE operation
(`id` int, `OPVerfahren` varchar(10))
;

INSERT INTO operation
(`id`, `OPVerfahren`)
VALUES
(1, '0'),
(2, '1'),
(4, '0'),
(5, '20'),
(6, '0'),
(7, '1'),
(8, '20'),
(9, '0'),
(10, '0')
;

和此选择语句

    SELECT "Surgery1",SUM(IF (op.OPVerfahren = "0",1,
               if( op.OPVerfahren = "1",1,
                if (op.OPVerfahren = "20", 1,0)
                 )
              )
          ) "Surgery1"
  FROM operation op
  union
  SELECT "Surgery2", SUM(IF (op.OPVerfahren = "0",1,
               if( op.OPVerfahren = "1",1,
                if (op.OPVerfahren = "20", 1,0)
                 )
              )
          ) "Surgery2"
FROM operation op

您得到以下结果

Surgery1    Surgery1
Surgery1    9
Surgery2    9

哪个是此示例的正确结果。当然,您必须要适应实际的结构和数据]

我个人将执行以下操作

    SELECT SUM(IF (op.OPVerfahren = "0",1,
               if( op.OPVerfahren = "1",1,
                if (op.OPVerfahren = "20", 1,0)
                 )
              )
          ) "Surgery1",
          SUM(IF (op.OPVerfahren = "0",1,
               if( op.OPVerfahren = "1",1,
                if (op.OPVerfahren = "20", 1,0)
                 )
              )
          ) "Surgery2"
FROM operation op

哪个会得到你

Surgery1    Surgery2
9           9

但是您的原始作品似乎想要两行,所以...

© www.soinside.com 2019 - 2024. All rights reserved.