Подсчет или SUM () нескольких столбцов простого запроса

Мне нужно суммировать значения, хранящиеся в 17 столбцах одной и той же таблицы, используя php, и стараясь сделать запрос как можно меньшим и простым:

Настроить таблицу можно так:

  | 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

Решение

Всего можно использовать один 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

Другие решения

Вы можете сделать функцию, которая генерирует sql на основе массива столбцов siterun

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) в качестве ‘siterun2’, SUM (siterun3) в качестве ‘siterun3’, SUM (siterun4) в качестве ‘siterun4’, SUM (siterun5) в качестве ‘siterun5’, SUM ( siterun17) как ‘siterun17’, (SUM (siterun1) + SUM (siterun2) + SUM (siterun3) + SUM (siterun4) + SUM (siterun5) + SUM (siterun17)) в качестве общего значения FROM dataTable WHERE sessionID = 22

0