2010-03-31 6 views
0

두 개의 테이블이 있습니다. 하나는 사용자 정보 "사용자"이고, 하나는 주석 정보 "주석"입니다.MySQl - 다른 테이블의 데이터를 계산하여 필드 업데이트

사용자 테이블에 사용자의 메모 수가 포함 된 새로운 필드 "메모"를 만들어야합니다. 표 "comments"는 해당 주석의 사용자 ID가있는 "user"필드를가집니다.

지금까지 모든 사용자의 댓글 수를 계산하는 가장 좋은 방법은 무엇입니까?

PHP를 사용하여 모든 사용자를 선택하고 주석의 개수를 계산 한 후 "주석"필드를 업데이트하는 스크립트를 작성해야합니다. 나에게는 힘든 것이 아니라 지루하다.

PHP가 없어도 MySQL에서만 가능합니까?

답변

2
UPDATE TABLE users SET CommentCount = (SELECT COUNT(*) FROM comments WHERE AuthorUserId = users.id) 
+0

오래된 좋은 SO 방법 자동 응답. –

1

왜 어쨌든 거기에 저장 하시겠습니까? 조합 된 쿼리 만 표시하는 것이 어떨까요?

select users.name, count(comments.id) as comment_count 
from users 
join comments on users.id=comments.user_id 
group by users.id 

당신이 그것을 당신의 방법을 수행 할 경우

그런 다음 주석을 저장하는 스크립트에
update users set comment=comment+1 where id=$user_id 

을 포함한다.

그리고 사용자가 자신의 의견을 삭제할 수있는 곳으로

update users set comment=comment-1 where id=$user_id 

. 그렇지 않으면 사용자가 새 명령을 추가하고 아직 스크립트를 실행하지 않았을 때 데이터가 동기화되지 않을 수 있습니다.

+0

모든 포럼, 게시판, Q & A 등 ... 데이터 그런 식으로 처리하기 위해 단지 쉽고, 가격이 "단지 쉽게 – Qiao

+1

아니, 그렇지 @Qiao 작은 부탁 읽을 수있는 좋은 텍스트 ". –

1

예, 가능합니다. 이것은 table joining입니다. users 테이블에 다른 필드를 추가하지 않고 resulting 테이블에 추가하십시오.

SELECT users.*, count(comments.id) as num_comments 
FROM users,comments 
WHERE comments.cid=users.id 
GROUP BY users.id 

이러한 쿼리는 relational databases이 발명 한 것입니다. 그것을 일반 텍스트 파일 상태로 되돌리지 마십시오. 그렇게하는 데에는 여러 가지 이유가 있습니다.
http://en.wikipedia.org/wiki/Database_normalization < -

+0

이것은 그가 무엇을 요구 했는가가 아닙니다. 그의 접근 방법 (추가 필드)을 사용하면 성능상의 이점이 있습니다. –

+2

새 코멘트가 입력 될 때마다 데이터를 실행하지 않으면 데이터가 잘못 될 수 있습니다. – Riho

+0

@Andreas 조숙 한 최적화가 모든 악. 들었어? 비정규 화는 무거운 이유로 이루어져야하며, "i-know-nothing"은 이러한 이유 중 하나가 아닙니다. –

관련 문제