Count或SUM()的多列简单查询

时间:2014-09-29 12:49:49

标签: php sql count sum

我需要使用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列之后变得非常大,可能会在以后更多。

基本上我需要它来添加列并回显结果。

任何有关这方面的帮助都会很棒,我上面的代码会有效,但我不确定它是否是最好的方法。

2 个答案:

答案 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