0

我有一个大约 100 列的 MySQL 表。所有列都是 INT。我希望能够通过其 ID 选择一行,并获得加在一起的所有列的总数。

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

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

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

4

2 回答 2

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;";
于 2012-09-29T11:58:02.947 回答
0

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

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

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

于 2012-09-29T11:57:10.430 回答