[解決済み] MySQLのforeachループ
2022-01-30 05:11:27
質問
MySQLのUserテーブルの各行を反復処理する必要があります。 以下のような条件で、Userの各反復行に新しい行のAddressを作成する必要があります。
私は3つのテーブルを持っています。
User: id, stuff, id_person, email
Person: id, stuff, id_address
Address: id, email
User.id_person が NOT NULL で、かつ person.id_address が NULL の場合、Address に新しい行を作成する必要があります。 User.emailと同じemailを持つ行を作成する必要があります。 Userの各行に対してこれを行う必要があります。
MySQLのカーソルを使おうとしましたが、使い方がよくわかりません。
どうすればいいのでしょうか?カーソルを使う代わりに何か他の方法がありますか?
よろしくお願いします。
EDIT: 今気づきましたが、person.id_address を今作成した address' 行の id で更新する必要があります。
どのように解決するのですか?
私が調べたところでは、あなたが提供したフィールドである限り、以下のもので十分だと思います。
INSERT INTO Address (email)
SELECT User.email
FROM User JOIN person ON User.id_person = person.id
WHERE person.id_address IS NULL
;
EDIT (カーソル付き)
カーソルを使えば簡単にできるはずですが、これらの意味するところをよく理解しておくことを強くお勧めします。
DROP PROCEDURE IF EXISTS _tmp_update_address;
DELIMITER $$
CREATE PROCEDURE _tmp_update_address()
BEGIN
DECLARE cursor_List_isdone BOOLEAN DEFAULT FALSE;
DECLARE cur_userId, cur_personId INT;
DECLARE cur_email VARCHAR(250) DEFAULT '';
DECLARE cursor_List CURSOR FOR
SELECT User.id, person.id_address, User.email
FROM User JOIN person ON User.id_person = person.id
WHERE person.id_address IS NULL
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursor_List_isdone = TRUE;
OPEN cursor_List;
loop_List: LOOP
FETCH cursor_List INTO cur_userId, cur_personId, cur_email;
IF cursor_List_isdone THEN
LEAVE loop_List;
END IF;
INSERT INTO Address (email) VALUES (cur_email);
UPDATE person SET person.id_address = LAST_INSERT_ID()
WHERE person.id = cur_personId;
END LOOP loop_List;
CLOSE cursor_List;
END
$$
DELIMITER ;
CALL _tmp_update_address();
関連
-
[解決済み】MySQL エラー #1133 - ユーザー テーブルに一致する行が見つかりません。
-
[解決済み] この操作を行うには、少なくとも1つのSUPER権限が必要です。
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] エラー 1698 (28000)。ユーザー 'root'@'localhost' のアクセスが拒否されました。
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQLの「ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再起動してみてください」を回避する方法
-
[解決済み】MySQL 派生テーブルはすべて独自のエイリアスを持つ必要があります。
-
コマンドでmysqlに接続中、'mysql'が内部または外部コマンドとして認識されない エラーは解決されました。
-
[解決済み】MySQLを使用してランダムでユニークな8文字の文字列を生成する方法
-
[解決済み】MySQL エラー #1133 - ユーザー テーブルに一致する行が見つかりません。
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] WHEREで集計関数は使用できません "というエラーを回避する方法
-
[解決済み] #1136 - 列数が 1 行目の値数と一致しません。
-
[解決済み] ルートユーザーでログインしているのに、phpMyAdminがデータベースを作成する権限がないと言う
-
[解決済み] DEFAULT NULLとCHECKBOX NULL mysqlの違いは何ですか?