MySQL には、テーブル行を反復処理するための組み込みループ メカニズムが提供されていません。ただし、この機能を実現するにはいくつかのアプローチがあります。
この方法では、カーソルを使用してテーブルの行を移動します。カーソルは、テーブル内の特定の行へのポインタとして機能します。次のコード スニペットは、カーソルの使用方法を示しています。
DROP PROCEDURE IF EXISTS loop_through_rows; DELIMITER ;; CREATE PROCEDURE loop_through_rows() BEGIN DECLARE cursor_id INT; DECLARE cursor_val VARCHAR; DECLARE done INT DEFAULT FALSE; DECLARE cursor CURSOR FOR SELECT ID, VAL FROM table_A; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor; read_loop: LOOP FETCH cursor INTO cursor_id, cursor_val; IF done THEN LEAVE read_loop; END IF; -- Perform operations on cursor_id and cursor_val END LOOP; CLOSE cursor; END; ;; DELIMITER ;
このアプローチでは、WHILE ループを利用して行の取得と処理を繰り返します。ループはすべての行が処理されるまで継続します。次のコードは、このメソッドを示しています。
SET @record = 0; SET @last_record = (SELECT COUNT(*) FROM table_A); WHILE @record < @last_record DO -- Perform operations on the current @record SET @record = @record + 1; END WHILE;
ループ機能をカプセル化するストアド プロシージャを作成できます。これにより、プロシージャを実行し、行を反復処理できます。
DROP PROCEDURE IF EXISTS loop_rows; DELIMITER ;; CREATE PROCEDURE loop_rows(IN table_name VARCHAR(255)) BEGIN SET @record = 0; SET @last_record = (SELECT COUNT(*) FROM table_name); WHILE @record < @last_record DO -- Perform operations on the current @record SET @record = @record + 1; END WHILE; END; ;; DELIMITER ;
以上がMySQL でテーブルのすべての行を反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。