Мне нужно суммировать значения, хранящиеся в 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 столбцов с возможностью большего в более поздний срок.
в основном мне нужно, чтобы сложить столбцы и повторить результат.
любая помощь в этом была бы хороша, мой приведенный выше код будет работать, но я не уверен, что это лучший подход.
Всего можно использовать один 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 на основе массива столбцов 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