MMORTBS開発記-011 mysqlはunpivotないんだって
いつもありがとうございます。
スキマ時間開発のお時間です。よろしくお願いします。
前回までのあらすじ
ユニット明細の画面できた。
今回はデータを作るよーってことで。
前回の
この部分をやっつけます。
ユニットは縦にデータ持っていて、マスタはさすがに管理面倒なので横持ち。
データコピーの際には、ひと手間が必要です。
そしてmysqlにはunpivotはございません。(へー。初めて知った)
なのでunpivotのSQLを発明する必要があります。
まぁそんなに長くないけど。
-- マスタから取得して登録する項目(属性)
INSERT INTO trn_memdtl SELECT
dtl1.user_id
, dtl1.member_id
, crs.memdtl_cd
, NULL
, CASE crs.memdtl_cd
WHEN 'attribute_01' THEN sp1.attribute1
WHEN 'attribute_02' THEN sp1.attribute2
WHEN 'attribute_03' THEN sp1.attribute3
WHEN 'attribute_04' THEN sp1.attribute4
WHEN 'attribute_05' THEN CASE WHEN dtl3.str_val IS NULL THEN sp1.attribute5 ELSE sp3.attribute1 END
WHEN 'attribute_06' THEN CASE WHEN dtl3.str_val IS NULL THEN sp1.attribute6 ELSE sp3.attribute2 END
WHEN 'attribute_07' THEN CASE WHEN dtl2.str_val IS NULL THEN sp1.attribute7 ELSE sp2.attribute1 END
WHEN 'attribute_08' THEN CASE WHEN dtl2.str_val IS NULL THEN sp1.attribute8 ELSE sp2.attribute2 END
WHEN 'attribute_09' THEN CASE WHEN dtl2.str_val IS NULL THEN sp1.attribute9 ELSE sp2.attribute3 END
WHEN 'attribute_10' THEN CASE WHEN dtl2.str_val IS NULL THEN sp1.attribute10 ELSE sp2.attribute4 END
WHEN 'attribute_11' THEN CASE WHEN dtl3.str_val IS NOT NULL THEN sp3.attribute3
WHEN dtl2.str_val IS NOT NULL THEN sp2.attribute5 ELSE sp1.attribute11 END
WHEN 'attribute_12' THEN CASE WHEN dtl3.str_val IS NOT NULL THEN sp3.attribute4
WHEN dtl2.str_val IS NOT NULL THEN sp2.attribute6 ELSE sp1.attribute12 END
WHEN 'attribute_13' THEN sp1.attribute13
END
, NOW(), NOW(), 'prc_decision_gacha', 'prc_decision_gacha'
FROM trn_memdtl dtl1
LEFT JOIN trn_memdtl dtl2
ON dtl1.user_id = dtl2.user_id
AND dtl1.member_id = dtl2.member_id
AND dtl2.memdtl_cd = 'breed_02'
LEFT JOIN trn_memdtl dtl3
ON dtl1.user_id = dtl3.user_id
AND dtl1.member_id = dtl3.member_id
AND dtl3.memdtl_cd = 'breed_03'
LEFT JOIN mst_species sp1
ON dtl1.str_val = sp1.species_cd
LEFT JOIN mst_species sp2
ON dtl2.str_val = sp2.species_cd
LEFT JOIN mst_species sp3
ON dtl3.str_val = sp3.species_cd
CROSS JOIN
( SELECT 'attribute_01' AS memdtl_cd
UNION ALL SELECT 'attribute_02' AS memdtl_cd
UNION ALL SELECT 'attribute_03' AS memdtl_cd
UNION ALL SELECT 'attribute_04' AS memdtl_cd
UNION ALL SELECT 'attribute_05' AS memdtl_cd
UNION ALL SELECT 'attribute_06' AS memdtl_cd
UNION ALL SELECT 'attribute_07' AS memdtl_cd
UNION ALL SELECT 'attribute_08' AS memdtl_cd
UNION ALL SELECT 'attribute_09' AS memdtl_cd
UNION ALL SELECT 'attribute_10' AS memdtl_cd
UNION ALL SELECT 'attribute_11' AS memdtl_cd
UNION ALL SELECT 'attribute_12' AS memdtl_cd
UNION ALL SELECT 'attribute_13' AS memdtl_cd
) crs
WHERE dtl1.memdtl_cd = 'breed_01'
AND dtl1.user_id = x_user_id
AND dtl1.member_id = p_member_id;
マスタの数も少ないので、汎用処理にする必要はない。。。はず。
ウォーターフォール開発ではない弊害が今ここに!
何個か出てきたら考える。
最後まで読んでいただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?