对于每个手术中心,我都建立了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逐个显示手术,并用回车分隔
但是,我期望的是一个表,在其左侧有两列,给出了操作名称,在其右边列出了手术数。
抱歉,但是我太愚蠢了,无法意识到这一点。
有人,请给我一个解决方案?
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
但是您的原始作品似乎想要两行,所以...