Mysql 存储过程计数故障

Mysql 存储过程计数故障,mysql,stored-procedures,Mysql,Stored Procedures,我有一个表[users],我希望统计每次出现的电影ID的数量,并更新另一个名为[total]的表中的记录。因此,对于Movie_ID=81212,它会将值2发送到我的[total]表 如下图所示: ------------------------------------ | [users] | [total] +---------+---------+ +---------+

我有一个表[users],我希望统计每次出现的电影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 //

我想你可以不用循环就可以做到:

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

我想你可以不用循环就可以做到:

update total set total.Player_Count = (select COUNT(Movie_ID) from users where total.Movie_ID=users.Movie_ID group by (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 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
表中的信息可能已过期。

我计划在每次更新用户表时运行该过程。在这种情况下,您可以使用触发器。我计划在每次更新用户表时运行该过程。在这种情况下,您可以使用触发器。