1

Movie_IDの各出現回数をカウントし、[total]という別のテーブルのレコードを更新したいテーブル[users]があります。したがって、Movie_ID = 81212の場合、値2が[合計]テーブルに送信されます。

以下のように:

        ------------------------------------
        |  [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とそれを合計します。

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 //
4

2 に答える 2

1

このフィールドを更新するには、次のようなクエリを使用できます-

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

しかし:本当にtotalテーブルが必要ですか?この情報は、SELECTクエリを使用していつでも取得できます。表の情報totalが古くなっている可能性があります。

于 2012-08-29T06:57:57.747 に答える
0

私はあなたがループなしでこれを行うことができると思います:

update total set total.Player_Count = (select COUNT(Movie_ID) from users where total.Movie_ID=users.Movie_ID group by (Movie_ID));
于 2012-08-29T01:32:22.623 に答える