我需要使用php将存储在同一表中多达17列中的值相加,并尽量保持查询的小而简单:
表的设置是这样的:
| siterun1 | siterun2 | siterun3 | siterun4 | siterun5 | siterun6 | siterun17 |
| 0 | 5 | 4 | 1 | 0 | 0 | 3 |
有没有一种快速的方法可以编写一个查询,将列siterun1到siterun17的所有值加起来?
就在那一刻,我开始写作;
SELECT SUM(siterun1) as 'siterun1', SUM(siterun2) as 'siterun2',
SUM(siterun3) as 'siterun3',
(SUM(siterun1) + SUM(siterun2) + SUM(siterun3)) as 'Total'
FROM dataTable WHERE sessionID=1
但这将变得非常大,多达17列,以后可能会有更多。
基本上,我需要它来将列相加并返回结果。
这方面的任何帮助都会很好,我上面的代码会起作用,但我不确定这是否是最好的方法。
对于总数,您可以使用单个SUM
,因此不使用
(SUM(siterun1) + SUM(siterun2) ...) Total
你可以写
SUM(siterun1 + siterun2 ...) Total
或者如注释中所述,您可以使用php(array_sum
)进行求和。
$query = "SELECT SUM(siterun1) as 'siterun1',
SUM(siterun2) as 'siterun2',
SUM(siterun3) as 'siterun3'
FROM dataTable WHERE sessionID=1";
$rs = mysqli_query($query);
$r = mysqli_fetch_assoc($rs);
$r['Total'] = array_sum($r); //assumes you only have sum columns in your select
您可以创建一个基于站点运行列数组生成sql的函数
function genSiterunSql($siteruns,$sessId){
$sql = array();
$tsum = array();
foreach ($siteruns as $siterun){
$sql[] = "SUM (siterun{$siterun}) as 'siterun{$siterun}' ";
$tsum[] = "SUM (siterun{$siterun})";
}
return 'SELECT '. implode(' , ', $sql) . ' , ( '. implode(' + ', $tsum ) .') as Total FROM dataTable WHERE sessionID=' . $sessId;
}
$siteruns=array(1,2,3,4,5,17);
echo genSiterunSql($siteruns, 22);
//选择SUM(siterun1)作为"siterun1",SUM(siterun2