2011-05-15 6 views
1

나는 name, strength, intelligence, skill과 같은 컬럼을 가진 "character"라는 mysql 데이터베이스 테이블을 가지고있다. 자동으로 힘, 지능과 기술을 요약 한 칼럼을 만들고 싶습니다. 이것이 가능한가?Mysql - 행을 자동으로 합하는 열을 만드는 방법?

쿼리를 수행하는 방법을 보여주는 많은 페이지가 있습니다. 나는 문자로부터 sum (sum)으로 select (str + intel + skl)와 같은 질의를 수행했다. ; 합계가 정상적으로 반환됩니다. 그것은 것 내가 "문자에서 *를 선택"할 때

  1. 중 하나가 (예를 들어, 내 MySQL의 DB에 해당 쿼리를 자동화 :

    는하지만 내가 (이해하지 못하는) 누락은에 어떻게

  2. 또는/어떻게 SUM을 실시간으로 보여줄 수 있도록 mysql 쿼리를 내 레일 앱에 통합 할 것인가? 예를 들어, 강도가 발생하면 그에 따라 SUM이 업데이트됩니다.

중요한 점은 열 (강도, 인텔리전스, 기술)에 걸쳐 열을 합산하고 열 (여러 문자의 강점)을 합하지 않는 것입니다.

+0

나는 트리거를 검색해야하며 삽입시 실행해야한다고 생각한다. – codeomnitrix

답변

1

정확하게 질문을 이해하고 강도, 정보, 기술 항목이 숫자 데이터 유형 인 경우 작동합니다.

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

이것을 기반으로보기를 만드는 것이 좋습니다. –

+0

좋아, 이것은 원하는 값으로 "합계"라는 새로운 테이블을 만들었습니다. 그런 다음 새 테이블 "합계"를 "문자"와 병합합니까? – Stanvrl

+0

실제로, character_id와 같은 다른 적절한 열을 추가하기 만하면됩니다. 뷰에는 필요한 것을 포함 할 수 있습니다. – squawknull

0

저장 프로 시저로 만들려고합니다. 프로 시저가 계산을 수행 할 수 있으며 결과가 열인 것처럼 결과를 읽을 수 있습니다.

이 사용 사례에 대한 간단한보기를 사용하지 못할 수도 있습니다.

+0

위의 저장 프로 시저를 찾았다. 저장 프로 시저를 만든 후에는 내 뷰에서 어떻게 호출해야합니까? – Stanvrl

3

당신의 최선의 옵션은 트리거 (또는 응용 프로그램 수준에서 유사한 코드)를 사용하는 것입니다.

보기를 사용하는 경우에도 너무 자주 사용되지만 성능상의 이유로 사전에 계산되기를 원할 것입니다. 트리거에 대한 소개

은 다음을 참조하십시오

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; 

가 또는 앱에서 합을 미리 계산하고 그에 따라 보관 :

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

당신은 아마 이런 식으로 뭔가를 할 수 있습니다.

사이드 노트 : 실제로 저장해야하는지 자문 해보십시오. 다른 주석가가 지적한 것처럼 자동 계산 된 데이터가 필요하지 않을 수도 있습니다.

0

mysql에서 이것을하지 마십시오. 심각하게 표시 할 때 값을 추가하십시오.

또는 원한다면 SELECT 문에서 반환 할 때 mysql에서 합산하십시오.

총 몇 개의 숫자를 유지하기 위해 방아쇠를 사용하지 마십시오. 프로젝트의 모든 미래 개발자를 혼란스럽게하는 중대한 방법입니다.

+0

"표시 할 때 값을 추가하는"예를 들어 주시겠습니까? – Stanvrl

+0

select (select a + b + c AS total_stats FROM tbl ...)에서 계산 된 열을 사용하여 서버를 추가하거나 클라이언트 코드에 추가 할 수 있습니다. 클라이언트 코드에서 더 많은 작업을 수행하는 것은 서버보다 클라이언트를 확장하기가 쉽기 때문에 확장 가능한 응용 프로그램의 경우 우수한 것으로 간주됩니다. – MarkR

+0

@MarkR, 표가 꽤 큰 경우 (예 : 10M 행) 클라이언트 측 (모든 행을 루핑한다고 상상해보십시오.)을하지 않으면 RAM이 부족합니다. – Ignas

관련 문제