2012-08-29 5 views
1

각 [Movie_ID]의 발생 횟수를 계산하고 [total]이라는 다른 테이블의 레코드를 업데이트하려는 [users] 테이블이 있습니다. 그래서 Movie_ID = 81212의 경우, 값 2를 my [total] 테이블에 보냅니다.저장 프로 시저 계산 문제

아래와 같이 : 그래서

 ------------------------------------ 
     | [users]       | [total] 
    +---------+---------+    +---------+-------------+ 
    |Movie_ID |Player_ID|    |Movie_ID | Player_Count| 
    +---------+---------+    +---------+-------------+ 
    |81212 |P3912 |    | 81212 |  2  | 
    +---------+---------+    +---------+-------------+ 
    |12821 |P4851 |    | 12821 |  1  | 
    +---------+---------+    +---------+-------------+ 
    |81212 |P5121 | 
    +---------+---------+ 
(movie_ID + player_ID form composite key 
so Movie_ID does not need to be unique) 

내가 저장 프로 시저와 함께이를 달성하기 위해 노력하고있어, 이것은 내가 지금까지 무엇을 가지고 : 나는 부분을 코딩하는 방법을 잘 모르겠어요 곳을 [users] 테이블의 모든 항목을 반복하여 movie_id의 각 항목을 찾아서 합산합니다. 당신이 정말 필요하십니까 : -

UPDATE 
    total t 
    JOIN (SELECT Movie_ID, COUNT(*) cnt FROM users GROUP BY Movie_ID) m 
    ON t.Movie_ID = m.Movie_ID 
SET 
    t.Player_Count = cnt 

하지만

update total set total.Player_Count = (select COUNT(Movie_ID) from users where total.Movie_ID=users.Movie_ID group by (Movie_ID)); 

답변

1

이 같은 쿼리를 사용하여이 필드를 업데이트하려면 :

DELIMITER // 

CREATE PROCEDURE `movie_total` (OUT movie_count int(5)) 
LANGUAGE SQL 
MODIFIES SQL DATA 
BEGIN 

DECLARE movie_count int(5); 

SELECT count(movie_id) AS movie_count FROM users 
foreach unique row in Users ; 

    IF (SELECT COUNT(*) FROM users WHERE movie_id) > 0 
    THEN 
    INSERT INTO total (:movie_id, :Player_Count) VALUES (movie_id, movie_count); 


END // 
+0

글쎄, 난 사용자 테이블의 모든 업데이 트에서 프로 시저를 실행할 계획이다. – Undermine2k

+0

이 경우 트리거를 사용할 수 있습니다. – Devart

0

나는 당신이 루프없이이 작업을 수행 할 수 있다고 생각 total 테이블? SELECT 쿼리를 사용하여 항상이 정보를 얻을 수 있습니다. total 테이블의 정보가 유효하지 않을 수 있습니다.