2009-08-25 9 views
0

MySQL에 관해 뭔가를 놓친 것 같습니다.Mysql - 열을 사용하여 카운트 저장

"열"에 "개수"를 저장하는 방법을 찾으려고합니다. 수동 업데이트없이 동적으로 업데이트해야합니다.

회원이 콘텐츠를 만들거나 삭제할 때마다 1에 더하고 싶지 않습니다. contentcount의 필드는이 멤버가 소유 한 모든 컨텐츠의 수입니다.

create table content 
(
    id_content   int not null auto_increment, 
    id_member   int not null, 
    primary key (id_content) 
); 

create table member 
(
    id_member   int not null auto_increment, 
    contentcount   ???????????????, 
    primary key (id_member) 
); 

alter table content add constraint fk_member_content foreign key (id_member) 
     references member (id_member) on delete cascade on update cascade; 

어떻게하면됩니까? 도움 주셔서 감사합니다.

답변

3

액세스하려면 테이블의 필드로 카운트를 저장할 필요가 없습니다. 당신은

SELECT COUNT(field_name) FROM table_name; 

주를 사용하여 언제든지 액세스 할 수 FIELD_NAME은 일부 NULL이이 수에 포함되지 않습니다 값이 포함되어 있으므로 이러한 기본 키로 null 값을 (포함하지 열을 사용하는 것이 가장 좋습니다 경우 또는 다른 인덱스 필드)

+0

동의 ... 테이블을 쿼리하는 대신 실제 개수를 저장해야하는 구체적인 이유가 있습니까? – Evernoob

1

이것은 삽입 후 삭제 트리거 이후에만 수행 할 수 있다고 생각합니다. 후 삽입에서 contentcount 열을 증가시키고 삭제 후 감소시킵니다.

1
CREATE TRIGGER teh_counter AFTER INSERT ON content 
FOR EACH ROW 
BEGIN 
update member set contentcount=(contentcount+1) where id_member=NEW.id_member; 
END; 
1

실제로 데이터베이스에 저장하려면 트리거를 사용하십시오. 그러나 이것을 저장하는 것은 불필요하게 (복잡성 추가), 저장하지 않는 것보다 느립니다. 콘텐츠의 member_id 열에 색인을 추가하기 만하면됩니다.

그런 다음 사용

SELECT COUNT(*) FROM content WHERE member_id = ? 

필요한 경우는, 그 내용 카운트 여러 회원들과 순서를 선택하는 것이 매우 쉽다.

내가, AUTO_INCREMENT있는 테이블을 만들고 그것으로 행을 삽입 할
0

나는 contentcount를 저장하고 싶었 저장하기 때문에 I Propel에 의해 생성 된 Flex AS3와 PHP 클래스 사이의 Propel/AMFPHP 및 클래스 매핑을 사용합니다.

업데이트/삭제를위한 트리거가 제 해결책입니다. 전에는 방아쇠를 사용하지 않으므로 배울 것입니다.

답장을 보내 주셔서 감사합니다. 나는 당신이 너무 빨리 대답했다는 것에 감명 받았다.

+0

트리거를 넣기 만하면됩니다. 잘 작동합니다! 다시 한번 감사드립니다! – Thommas

관련 문제