質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.06%

mysqlにinsertでレコード登録する際にカラムの中身を配列かオブジェクトにしたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 231

score 28

前提・実現したいこと

racesテーブルの中のcheck_points、tagsというカラムの中身を配列かオブジェクトにして
chromeのJSONViewで表示した時に+で展開できるようにしたいです。

racesテーブルの中に7つのカラムを用意しています。
◦race_id
◦race_name
◦check_point_count
◦race_start_date
◦race_end_date
◦check_points
◦tags

phpMyAdminのSQL上で下記のクエリを実行しました。

SELECT * FROM `races` WHERE 1;
insert into races(race_id, race_name, check_point_count, race_start_date, race_end_date, check_points, tags)
 values(1, '{$defT_NAME}', '10', '2020-04-23 07:00:00 +0900', '2020-04-23 10:00:00 +0900', '[
                    {
                    "check_point_num":1,
                    "check_point_name":"受付",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":2,
                    "check_point_name":"スタート",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":3,
                    "check_point_name":"中継地点)",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":4,
                    "check_point_name":"ゴール",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                ]',
                "tags":'[
                    {"id":"04F0B93A665D80","bib_no":"1","title":"hogehoge-taro"},
                    {"id":"04D1B93A665D80","bib_no":"2","title":"hogehoge-jiro"},
                    {"id":"0413B93A665D81","bib_no":"3","title":"hogehoge-rena"},
                ]');

上記クエリを実行すると下記(現在ブラウザ表示できているjsonコード)になります

現在ブラウザ表示できているjsonコード

JSONViewの表示 閉じタグの-はracesテーブルのみ
check_pointsとtagsの中身は文字列で表示はできます

[
          - {
                "race_id":1,
                "race_name":"{$defT_NAME}",
                "check_point_count": 4,
                "race_start_date":"2020-04-23 07:00:00 +0900",
                "race_end_date":"2020-04-23 10:00:00 +0900",
                "check_points":"[
                    {
                    "check_point_num":1,
                    "check_point_name":"受付",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":2,
                    "check_point_name":"スタート",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":3,
                    "check_point_name":"中継地点)",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":4,
                    "check_point_name":"ゴール",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                ]",
                "tags":"[
                    {"id":"04F0B93A665D80","bib_no":"1","title":"hogehoge-taro"},
                    {"id":"04D1B93A665D80","bib_no":"2","title":"hogehoge-jiro"},
                    {"id":"0413B93A665D81","bib_no":"3","title":"hogehoge-rena"},
                ]",
         ]

実現したいブラウザで表示したいjsonコード

JSONViewの表示 テーブルを展開していない状態

[
  - {
        race_id: "1",
        race_name: "{$defT_NAME}",
        check_point_count: "10",
        race_start_date: "2017-04-23 07:00:00",
        race_end_date: "2017-04-23 10:00:00",
        check_points:[
                        + {・・・}
                     ],
        tags: [
                 + {・・・}
              ]
    }
]

実現したいcheck_pointsとtagsを展開した表示

[
          - {
                "race_id":1,
                "race_name":"{$defT_NAME}",
                "check_point_count": 4,
                "race_start_date":"2020-04-23 07:00:00 +0900",
                "race_end_date":"2020-04-23 10:00:00 +0900",
                "check_points":
         [ 
         - {   
                    {
                    "check_point_num":1,
                    "check_point_name":"受付",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":2,
                    "check_point_name":"スタート",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":3,
                    "check_point_name":"中継地点)",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
                    {
                    "check_point_num":4,
                    "check_point_name":"ゴール",
                    "barrier_time":"2020-04-23 09:00:00 +0900"
                    },
          }
                ],
                "tags":
                [
                - {
                    {"id":"04F0B93A665D80","bib_no":"1","title":"hogehoge-taro"},
                    {"id":"04D1B93A665D80","bib_no":"2","title":"hogehoge-jiro"},
                    {"id":"0413B93A665D81","bib_no":"3","title":"hogehoge-rena"}
                  }
                ],
]

試したこと

➀SOL上でのクエリの実行で

check_points: “{}”
tags: “{}”



JSON形式について参考にしたサイト
このサイトを参考にしてSOL上でのクエリの実行で

check_points: []
tags: []

とやってみましたが
➀では#4025 -CONSTRAINTで制約が守れていない
➁では文字列でなければいけないというエラーが出てしまいます。

ご助言よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る