我需要使用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列之后变得非常大,可能会在以后更多。
基本上我需要它来添加列并回显结果。
任何有关这方面的帮助都会很棒,我上面的代码会有效,但我不确定它是否是最好的方法。
答案 0 :(得分:1)
总数可以使用一个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
答案 1 :(得分:0)
您可以创建一个基于siterun列数组生成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);
// SELECT SUM(siterun1)as' siterun1' ,SUM(siterun2)as' siterun2' ,SUM(siterun3)as' siterun3' ,SUM(siterun4)as' siterun4' ,SUM(siterun5)as' siterun5' ,SUM(siterun17)as' siterun17' ,(SUM(siterun1)+ SUM(siterun2)+ SUM(siterun3)+ SUM(siterun4)+ SUM(siterun5)+ SUM(siterun17))as Total FROM dataTable WHERE sessionID = 22