我有一个包含大约100列的MySQL表。所有列都是INT。我希望能够按ID选择一行,并获取所有列的总数。
还有两个额外的考虑因素。字段标题差别很大,所以我希望能够通过引用字段编号而不是字段标题来使其工作。
最后,我希望能够指定一个范围,例如,在字段76中添加字段35的总数,其中id = 50。
有办法做到这一点吗?非常感谢你!
答案 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'
使用它可以构建一个列数组,进行查询并对值求和。它不是一个“一步到位”的过程,但它就足够了。