我有一个表[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 //
答案 0 :(得分: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
表中的信息可能已过期。
答案 1 :(得分:0)
我认为你可以在没有循环的情况下做到这一点:
update total set total.Player_Count = (select COUNT(Movie_ID) from users where total.Movie_ID=users.Movie_ID group by (Movie_ID));