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


Count or SUM() of multiple columns simple query

我需要使用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