プレゼント応募フォームを作成中です。
テーブル定義は次の通りです
CREATE TABLE IF NOT EXISTS `vote_results` ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, product_code int(11) NOT NULL, product_name varchar(255) NOT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
フォームに名前を記入し、応募したい商品を選択すれば、
名前、商品コード、商品名がDBにINSERTされるという仕様です。
事情があり、商品データをマスタテーブルで管理することはできません。
名前も同様です。なので、JOINするという選択肢が使えません。
さて、この状態でテストデータを10万件ぐらい作る必要があります。
暫定的に次のようなものを作りました
TRUNCATE vote_results; INSERT INTO vote_results () VALUES (); INSERT INTO vote_results (id) SELECT 0 FROM vote_results; -- 2倍ずつ増えていくので10万件ぐらいになるまで繰り返す UPDATE vote_results SET name = CONCAT('山田太郎_', CEIL(RAND() * 100)), product_code = ELT(0.5 + RAND() * 2, 'product_a','product_b'), product_name = ELT(0.5 + RAND() * 2, '商品名A','商品名B'), created_at = ADDTIME(CONCAT_WS(' ','2020-09-01' + INTERVAL RAND() * 31 DAY, '00:00:00'), SEC_TO_TIME(FLOOR(0 + (RAND() * 86401)))) ;
したいことは、商品コードがproduct_aならば、商品名を商品名Aに、商品コードがproduct_bならば、商品名を商品名BにUPDATEすることです。
こうすれば出来ると思いますが
UPDATE vote_results SET product_name = '商品名A' WHERE product_code = 'product_a'; UPDATE vote_results SET product_name = '商品名B' WHERE product_code = 'product_b';
実際には商品データが50件程あるため、50行分のUPDATE句を作るのはできなくはないですがしんどいです。
なにか、ワンライナーで実現する方法はありませんか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。