MySQL - 在多列中添加行总数

时间:2012-09-29 11:47:05

标签: php mysql sql phpmyadmin

我有一个包含大约100列的MySQL表。所有列都是INT。我希望能够按ID选择一行,并获取所有列的总数。

还有两个额外的考虑因素。字段标题差别很大,所以我希望能够通过引用字段编号而不是字段标题来使其工作。

最后,我希望能够指定一个范围,例如,在字段76中添加字段35的总数,其中id = 50。

有办法做到这一点吗?非常感谢你!

2 个答案:

答案 0 :(得分:1)

您需要动态构建查询。

首先需要列名称(您也可以自动检索它们,但需要额外的查询)。最好的办法是将它们放在一个数组中:

$Fields = array(
   'id', 'fld2', 'fld3', ..., 'fld99'
);

function getSumField($from, $to, $allow_null = False)
{
    GLOBAL $Fields;
    $a_sum = array();
    for($i = $from; $i <= $to; $i++)
    {
        if ($allow_null)
            $a_sum[] = "COALESCE({$Fields[$i]},0)";
        else
            $a_sum[] = $Fields[$i];
    }
    return '('.implode('+', $a_sum).')';
}

// So we want: sum of fields 17-42 of the ONE ROW where ID = 5

$fld = getSumField(17, 42);
$SQL = "SELECT $fld FROM tbl WHERE id = 5;";

// Sum of same, in rows with ids from 7 to 22
$SQL = "SELECT SUM($fld) AS total FROM tbl WHERE id BETWEEN 7 AND 22;";

答案 1 :(得分:0)

您可以使用info_schema获取列列表:

select * from information_schema.columns where table_name='table'

使用它可以构建一个列数组,进行查询并对值求和。它不是一个“一步到位”的过程,但它就足够了。