Mysql 存储过程计数故障
我有一个表[users],我希望统计每次出现的电影ID的数量,并更新另一个名为[total]的表中的记录。因此,对于Movie_ID=81212,它会将值2发送到我的[total]表 如下图所示:Mysql 存储过程计数故障,mysql,stored-procedures,Mysql,Stored Procedures,我有一个表[users],我希望统计每次出现的电影ID的数量,并更新另一个名为[total]的表中的记录。因此,对于Movie_ID=81212,它会将值2发送到我的[total]表 如下图所示: ------------------------------------ | [users] | [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
表中的信息可能已过期。我计划在每次更新用户表时运行该过程。在这种情况下,您可以使用触发器。我计划在每次更新用户表时运行该过程。在这种情况下,您可以使用触发器。