###前提・実現したいこと
「jp_contents_table」から「comment」を取得しています。
この「attach_id」のカラムの値が0でないとき、
コメントへの添付データとして「attached_xxx」というカラムを連結したいです。
しかし添付データの取得先を分岐させるにあたって、問題が生じています。
###発生している問題
図でご説明します。
まず「comment」である【content_id=11,7,3,1】が取得されています。
このうち「attach_id」のカラムの値が0でないのは【content_id=11,7,3】で、
この3つが添付データを持つということです。
なのでこの3つには「attached_xxx」のカラムに値を入れたいと思っています。
そして【content_id=7】は「attached_xxx」のカラムに値が入っていて問題ありませんが、(図の青枠)
なぜか【content_id=11,3】は「attached_xxx」のカラムの値がnullとなってしまいます。(図の赤枠)
###問題のソースコード
発生している問題を起こすソースコードはこちらです。
(文字数制限の都合上、リンクだけとさせて頂きました。)
###目的の結果
こちらが目的の結果です。図の赤枠でnull
となっている部分は次のように埋めたいです。
このように埋まるロジックは次に記します。
SQL
1CREATE TABLE result 2 (`content_id` int, `author_id` int, `content_date` text, `parent_thread_id` int, `parent_content_id` int, `content_type` text, `content_text` text, `attach_id` int, `attach_type` text, `attach_country_code` text, `attached_id` varchar(6), `attached_type` varchar(6), `attached_country_code` varchar(6), `attached_nick_name` varchar(6), `attached_content_text` varchar(13), `attached_follow_date` varchar(6), `attached_favorite_date` varchar(19)) 3; 4INSERT INTO result 5 (`content_id`, `author_id`, `content_date`, `parent_thread_id`, `parent_content_id`, `content_type`, `content_text`, `attach_id`, `attach_type`, `attach_country_code`, `attached_id`, `attached_type`, `attached_country_code`, `attached_nick_name`, `attached_content_text`, `attached_follow_date`, `attached_favorite_date`) 6VALUES 7 (11, 2, '2020-11-11 11:00:00', 8, 0, 'comment', '米国の映画スレを添付します', 9, 'thread', 'jp', 9, 'thread', 'jp', null, '米国の映画について語るスレ', null, null), 8 (7, 1, '2020-07-07 07:00:00', 10, 0, 'comment', '日本の田中三郎さんを添付します。', 3, 'user', 'jp', 3, 'user', 'jp', '田中三郎', null, null, '2020-03-03 03:00:00'), 9 (3, 4, '2020-03-03 03:00:00', 8, 0, 'comment', '韓国の지안さんを添付します。', 3, 'user', 'ko', 3, 'user', 'ko', null, '지안', null, null), 10 (1, 3, '2020-01-01 01:00:00', 9, 0, 'comment', '米国のお勧め映画は何ですか?', 0, null, null, null, null, null, null, null, null, null) 11;
###取得のロジック
添付データの取得先は、
『jpのuser』ならば「jp_users_table」のテーブルにあり、
『jpだけどuser以外』なら「jp_contents_table」のテーブルにあり、
『jp以外』なら「xx_contents_table」のテーブルにある
という構造になっています。
(『jpのuser』とは、『attach_country_code='jp' かつ attach_type='user'』ということです。)
レコード | 「attach_id」 | 分類 | 添付データの取得先 |
---|---|---|---|
【content_id=11】 | 9 | 『jpだけどuser以外』 | jp_contents_table |
【content_id=7】 | 3 | 『jpのuser』 | jp_users_table |
【content_id=3】 | 3 | 『jp以外』 | xx_contents_table |
そのため取得のロジックは、
【content_id=11】は「jp_contents_table」から「content_id=9」を添付データとして扱いますので、目的の結果では「attached_content_text」のカラムに米国の映画について語るスレ
が入っています。
【content_id=7】は「jp_users_table」から「user_id=3」を添付データとして扱いますので、目的の結果では「attached_nick_name」のカラムに田中三郎
が入っています。
【content_id=3】は「xx_contents_table」から「content_id=3」を添付データとして扱いますので、目的の結果では「attached_content_text」のカラムに지안
が入っています。
###試したこと
まず「attached_id」のカラムを定義している、上記SQL fiddleの32~37行目のas attached_id
に注目しました。
これが取得できていないから、【content_id=11,3】のレコードの「attached_id」のカラムがnull
となっているのだと思います。
そこでこの32~37行目を下記のように変更してみました。
'テスト値' as attached_id
しかし【content_id=11,3】のレコードの「attached_id」のカラムはnull
のままなのです。
「attached_id」というカラムを定義している部分はここしかないので、null
でなくテスト値
が入ると思ったのですが、なぜnull
のままなのでしょうか。ここを変更してもダメとなると、何を変更したらいいのかわからなくなってしまいました。
###補足情報(FW/ツールのバージョンなど)
phpMyAdmin(4.8.5)で、MySQL(10.0.33-MariaDB)を使っています。
回答1件
あなたの回答
tips
プレビュー