Как создать столбец, который автоматически суммирует строки? - PullRequest
1 голос
/ 15 мая 2011

У меня есть таблица базы данных mysql под названием «персонаж» со столбцами, такими как имя, сила, интеллект, навык.Я хочу создать колонку, которая подводит итог силы, интеллекта и навыков АВТОМАТИЧЕСКИ.Возможно ли это?

Я видел множество страниц, показывающих, как выполнять запросы.Я хорошо выполнил запрос, такой как select (str + intel + skl) как сумма из символа;Он просто возвращает сумму.

Но я упускаю (не понимаю), как:

  1. либо АВТОМАТИЗИРОВАТЬ этот запрос в моей базе данных mysql (например,когда я выбираю «выбрать * из персонажа», он показывает «силу, интеллект, умение, сумму»),
  2. ИЛИ где / как включить запрос mysql в мое приложение rails, чтобы SUM отображался в реальном временивремя, и когда происходит изменение, например, для силы, SUM обновляется соответственно.

Ключевой момент, я суммирую столбцы по строке (сила, интеллект, навык), а не суммирую столбец(сильные стороны нескольких персонажей).

Ответы [ 4 ]

3 голосов
/ 15 мая 2011

Лучший вариант - использовать триггер (или аналогичный код на уровне приложения).

Использование представления тоже работает, но если вам это нужно часто, вы захотите предварительно рассчитать его из соображений производительности.

Для ознакомления с триггерами см .:

http://dev.mysql.com/doc/refman/5.6/en/triggers.html

Вы, вероятно, хотите что-то вроде этого:

CREATE TRIGGER character_sum_ins BEFORE INSERT ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;

CREATE TRIGGER character_sum_upd BEFORE UPDATE ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;

Либо предварительно рассчитайте сумму в своем приложении и сохраните ее соответствующим образом.

Примечание: спросите себя, действительно ли вам это нужно хранить. Как указывает другой комментатор, для автоматически рассчитанных данных может вообще не понадобиться

1 голос
/ 15 мая 2011

Это должно сработать, если я правильно понимаю ваш вопрос и столбцы силы, интеллекта и навыков являются числовыми типами данных.

select strength, intelligence, skill, strength+intelligence+skill as sum
from character

Как и предполагалось, представление может быть легко создано с помощью:

create view totals as
select strength, intelligence, skill, strength+intelligence+skill as sum
from character
0 голосов
/ 15 мая 2011

Не делайте этого в mysql, просто серьезно добавьте значения при их отображении.

Или, если вы действительно хотите, суммируйте их в mysql в своем операторе SELECT при их возврате.

Не используйте триггер только для того, чтобы поддерживать общее количество цифр - это серьезный способ запутать всех будущих разработчиков проекта.

0 голосов
/ 15 мая 2011

Вы хотели бы сделать это хранимой процедурой.Процедура может выполнять расчеты, и вы можете читать результаты, как если бы они были столбцами.

Возможно, вам также может понравиться простое представление для этого варианта использования.

...