Как я могу использовать SUM () для суммирования моего массива результатов? - PullRequest
0 голосов
/ 14 октября 2010

Мой текущий метод сложения строк выглядит так:

$totalxp = $row['Attackxp'] + $row['Defencexp'] + $row['Strengthxp'] + $row['Hitpointsxp'] + $row['Rangedxp'] + $row['Prayerxp'] + $row['Magicxp'] + $row['Cookingxp'] + $row['Woodcuttingxp'] + $row['Fletchingxp'] + $row['Fishingxp'] + $row['Firemakingxp'] + $row['Craftingxp'] + $row['Smithingxp'] + $row['Miningxp'] + $row['Herblorexp'] + $row['Agilityxp'] + $row['Thievingxp'] + $row['Slayerxp'] + $row['Farmingxp'] + $row['Runecraftxp'] + $row['Constructionxp'];

Но потом я увидел СУММУ () и попробовал это:

SELECT SUM(xp) FROM skills WHERE playerName='Undercover' 

Это работает, но мне нужны были все значения xp, поэтому я попытался добавить %xp, но это не сработает.

Как я могу использовать функцию Sum (), чтобы добавить все строки вместо того, чтобы напрягать PHP?

Ответы [ 3 ]

3 голосов
/ 14 октября 2010

Агрегатные функции (IE: SUM, MIN, MAX, COUNT и т. Д.) Не работают по столбцам - они работают со значениями для конкретного столбца на основе группировки (GROUP BY) и фильтрации (JOIN и / или WHERE ()).

Чтобы сложить значения в столбцах, их нужно добавить, как для обычных математических уравнений:

SELECT Attackxp + Defencexp + Strengthxp + Hitpointsxp + Rangedxp + Prayerxp + Magicxp + Cookingxp+ Woodcuttingxp + Fletchingxp + Fishingxp + Firemakingxp + Craftingxp + Smithingxp + Miningxp + Herblorexp + Agilityxp + Thievingxp + Slayerxp + Farmingxp + Runecraftxp + Constructionxp AS total_xp
  FROM skills 
 WHERE playerName = 'Undercover' 

Если у вас больше, чемодна запись, связанная с именем игрока, затем , вы можете использовать функцию агрегирования:

SELECT SUM(Attackxp + Defencexp + Strengthxp + Hitpointsxp + Rangedxp + Prayerxp + Magicxp + Cookingxp+ Woodcuttingxp + Fletchingxp + Fishingxp + Firemakingxp + Craftingxp + Smithingxp + Miningxp + Herblorexp + Agilityxp + Thievingxp + Slayerxp + Farmingxp + Runecraftxp + Constructionxp) AS total_xp
  FROM skills 
 WHERE playerName = 'Undercover'
1 голос
/ 14 октября 2010

Это зависит от данных таблицы, если каждый игрок представляет собой одну сущность (строку), тогда достаточно добавить столбцы:

SELECT Attackxp  + Defencexp + Strengthxp + Hitpointsxp +Rangedxp + Prayerxp + Magicxp + Cookingxp + Woodcuttingxp + Fletchingxp + Fishingxp + Firemakingxp + Craftingxp + Smithingxp + Miningxp + Herblorexp + Agilityxp + Thievingxp + Slayerxp + Farmingxp + Runecraftxp + Constructionxp 
As totalSkills FROM skills WHERE playerName = 'Undercover'

Но есть ли больше строк на игрока, чем вам нужно суммировать также строки

SELECT SUM(Attackxp  + Defencexp + Strengthxp + Hitpointsxp +Rangedxp + Prayerxp + Magicxp + Cookingxp + Woodcuttingxp + Fletchingxp + Fishingxp + Firemakingxp + Craftingxp + Smithingxp + Miningxp + Herblorexp + Agilityxp + Thievingxp + Slayerxp + Farmingxp + Runecraftxp + Constructionxp) 
As totalSkills FROM skills WHERE playerName = 'Undercover'
0 голосов
/ 14 октября 2010
SELECT SUM(`Attackxp`) + SUM(`Defencexp`) + ... AS `total_sum`
  FROM skills
 WHERE playerName='Undercover' 
...