2010-11-30 3 views
1

테이블 Profiles의 열을 다른 테이블의 COUNT로 업데이트하려고합니다. Videos. 모든 동영상은 Videos 테이블에 저장되며 ProfilesVideoCount이라는 열을 만들어서 해당 사용자의 동영상 COUNT 개를 Videos 테이블에 표시하려고합니다.다른 테이블의 COUNT가있는 MySQL 테이블 업데이트

는 기본적으로, cron 작업을 실행하려면 - 그래서 Videos 테이블에 사용자의 동영상의 COUNT를 찾는 방법을 알고 다음이 카운트 수와 사용자의 VideoCountProfiles에서 업데이트해야합니다.

어떤 동영상을 업로드했는지 확인하려면 Videos. OwnerProfiles. ID을 일치시켜야합니다. 아무도 내가 PHP 파일 cron 작업을 실행하는 데 필요한 SQL을 알고 있습니까?

+0

트리거가있는 경우 : 동영상 테이블에 행을 삽입하면 프로필 테이블의 열이 증가합니다. –

+0

@Vincent Savard 자주 업로드하는 경우 cron을 사용하는 것이 좋습니다 (100 % 올바른 Count-Columns (imo)가 필요 없음).이 열을 추가하려고하므로이 SQL 문이 필요합니다. – teemitzitrone

+0

@maggie : 그의 전화입니다. 그러나 방아쇠로, 그는이 SQL 문을 필요로하지 않을 것입니다, 그는'UPDATE table SET col = col + 1 - etc'만을 할 것입니다. –

답변

3
UPDATE Profiles 
SET VideoCount = (
    SELECT COUNT(*) 
    FROM Videos 
    WHERE Videos.Owner = Profiles.ID); 

단순한 시도를 포기하고 당신은 공상을 원하는 경우 : 모든 트리거 당신이해야 할 수도 있습니다 : 당신이 할 일의 종류

DELIMITER // 

CREATE TRIGGER increaseVideoCount AFTER INSERT ON Videos 
    FOR EACH ROW BEGIN 
    UPDATE Profiles SET VideoCount = VideoCount + 1 WHERE ID = NEW.Owner; 
    END; 
// 

CREATE TRIGGER decreaseVideoCount AFTER DELETE ON Videos 
    FOR EACH ROW BEGIN 
    UPDATE Profiles SET VideoCount = VideoCount - 1 WHERE ID = OLD.Owner; 
    END; 
// 

CREATE TRIGGER checkVideoCount AFTER UPDATE ON Videos 
    FOR EACH ROW BEGIN 
    IF OLD.Owner <> NEW.Owner THEN 
     UPDATE Profiles SET VideoCount = VideoCount + 1 WHERE ID = NEW.Owner; 
     UPDATE Profiles SET VideoCount = VideoCount - 1 WHERE ID = OLD.Owner; 
    END IF; 
    END; 
// 

DELIMITER ; 
+0

+1 그리고 @Rahul Mehta의 대답과 연결되면, 그것은 완전 할 것입니다. – Danosaure

+0

감사합니다. 내 호스팅 회사 (이상한 이유로)는 MySQL 트리거를 허용하지 않습니다. 그래서 cron 작업을 사용하거나 PHP를 업데이트하여 파일 업로드 시점을 업데이트해야합니다. – hohner

2

업로드 할 때 비디오 카운트를 업데이트 할 수있는 비디오 카운트를 업데이트하려는 경우 cron 작업이 필요하지 않습니다. 잘 모르겠어요

update profiles set videocount=(select count(*) from videos where profileid =$profileid) 
where profileid=$profileid 
+0

+1 그리고 @ maggie의 답변에 링크되어 있으면 완료 될 것입니다. – Danosaure

1

뭔가

UPDATE A SET VideoCount = 
(
    SELECT COUNT(B.*) 
    FROM Videos AS B INNER JOIN Profiles AS B ON (A.Profile_ID = B.Owner_ID) 
    GROUP BY B.Owner_ID 
); 

처럼이 구문은 완전히 올바른 것입니다. 그것은 ^^

을 할 수 그것을

관련 문제