1

我有一个表 [users],我希望计算 Movie_ID 每次出现的次数并更新另一个名为 [total] 的表中的记录。所以对于 Movie_ID=81212 它会将值 2 发送到我的 [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 并总结一下。

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 回答