2011-01-27 2 views
1

나는 posts 테이블과 likes 테이블을 가지고 있습니다. 많은 사용자가 게시물을 좋아할 수 있습니다. posts 테이블은 게시물에있는 likes의 수를 나타내는 비정규 화 된 likesScore 열을가집니다. 테이블을 업데이트하려면 likes 테이블 @postId에서 업데이트하고 싶습니다.표 B의 레코드 수를 사용하여 표 A의 점수 열을 업데이트하려면 어떻게해야합니까?

나는 그것을 수행하는 방법에 대한 아이디어를 가지고,하지만 난 구문 제대로 할 수 없습니다

UPDATE posts 
SET likesScore = ... 
WHERE posts.id = @postId 

답변

2

MySQL UPDATE statements support JOINs - 사용 :

UPDATE POSTS p 
     JOIN (SELECT t.postid, 
        COUNT(*) AS cnt 
       FROM LIKES t 
      GROUP BY t.postid) l ON l.postid = p.postid 
    SET likesscore = l.cnt 

표준 수단에이다 하위 쿼리를 사용하지만 WHERE 절의 하위 쿼리 필터링에서 상관 관계가 필요합니다. 그렇지 않으면 참조가없는 레코드를 업데이트 할 위험이 있습니다. 지원 테이블에.

필자는 LIKE를 할 때마다 데이터와 동기화되지 않을 위험이 있기 때문에 뷰를 사용하여 테이블에 카운트를 저장하는 것을 선호합니다.

+0

@OMG 조랑말, 많은 감사합니다. 하위 쿼리에서 "그룹화 기준"을 사용하는 대상을 물어볼 수 있습니까? 그냥 "where postId = @postId"를 사용할 수 없습니까? 또한, 당신은 조인을 사용하지만, 그 쿼리, 또는 적어도 핵심 단어 "조인"조인을 볼 수 없다 ... 내가 뭔가를 놓친 건가요? – Mohamad

+0

쉼표로 구분 된 테이블 목록 대신 하위 쿼리를 사용한다고 생각합니다. – TehShrike

+0

@TehShrike : Doh! Coffee (tm) 이전에 수정되었습니다. –

1
UPDATE posts 
SET likesScore = (SELECT count(*) FROM likes WHERE likes.id=posts.id) 
WHERE ... 
관련 문제