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

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

ただいまの
回答率

90.04%

DBの同じカラム直下に複数のレコードをinsertさせるには

解決済

回答 4

投稿 編集

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

leoairen

score 72

初心者です。
DBの同じカラム直下に複数のレコードをinsertさせるにはどうすればよいかどなたか教えて頂けますでしょうか。

以下は入力フォームで入力した複数の日付を確認画面で受け取ったものです。

<th>休日年月日</th>
<td>2016/9/12,2016/9/14,2016/9/20,2016/9/26,2016/9/28</td>
</table>

日付が一つでしたらinsertは可能ですが、複数の場合はinsertできませんでした。

一行の場合、

$sql = "insert into calendartbl (holiday) values ('ポストされた値')";」

複数でinsertした場合のDBのイメージは以下の通りです。

holiday(カラム名)
2016/9/12(レコード1行目)
2016/9/14(レコード2行目)
2016/9/20(レコード3行目)
2016/9/26(レコード4行目)
2016/9/28(レコード5行目)

どなたか教えて頂けたら幸いです。

よろしくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • KiyoshiMotoki

    2016/06/25 16:11

    あと、マルチポストはマナー違反と受け取られることがあります。https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88 お気をつけ下さい。http://oshiete.goo.ne.jp/qa/9322740.html, http://okwave.jp/qa/q9192595.html

    キャンセル

  • leoairen

    2016/06/25 16:16

    ご指摘、ありがとうございます。質問のほうは修正いたしました。マルチポストに関しては各掲示板に回答や返事してあればマナー違反まではならないと書いてありましたが、気を付けます。

    キャンセル

  • KiyoshiMotoki

    2016/06/25 16:31

    情報の追記、ありがとうございます。しかし、重要なのは「入力フォームで入力した複数の日付」を受け取ってから、追記いただいたSQL文を実行しているまでのPHPコードの方です。その部分がわからないと、抽象的な言葉でしか解決策を提案できません。

    キャンセル

回答 4

checkベストアンサー

0

基本INSERTで登録できるのは1レコードです。
この場合でしたらINSERTを5回実行するのが最適と思います。
INSERTとSELECTを組み合わせて1回のクエリで済ますこともできると思いますが、コードで書いた時の作りにくさや可読性を考えるとお勧めしません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/28 11:03

    こちらの質問の続きになってしまいますね。
    https://teratail.com/questions/39121
    $holiday配列にきちんと取り込めていれば問題ないと思うのですが。
    このままここで続けると当初の質問とかけ離れてしまうので、INSERTの問題が解決したのならこの質問は締めて、改めて質問をした方がよいと思います。

    キャンセル

  • 2016/06/28 11:26

    ありがとうございます。そう致します。

    キャンセル

  • 2016/06/28 13:46

    質問を新たにさせていただきました。
    https://teratail.com/questions/39404
    もしよろしければご回答お願いできたら幸いです。
    よろしくお願い致します。

    キャンセル

0

普通は、入れられません。

データを正規化することによって、検索したり並べ替えたりを素早く行おうという目的で使うのがデータベースだからです。
どのデータベースでも可能な方法で考えるとすると

・上限が決まってて数が少ないなら列を増やす。
・数が未定なら正規化して別のテーブルに入れる

のどちらかになると思います。

データベース特有の機能でもOKということであれば、PostgreSQLというデータベースなら配列型というのが使えるので、希望した処理ができるでしょう。

参考URL
https://www.postgresql.jp/document/9.1/html/arrays.html

他に出来るデータベースがあるのかも知れませんが私の知る限りでは、PostgreSQLだけです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/27 16:14

    ご回答、ありがとうございます。ttyp03さんの方法でできました。ありがとうございます。

    キャンセル

  • 2016/06/27 16:19

    良かったですね
    早く質問の最初に初心者ですとつけなくて良くなるといいですね ^^

    キャンセル

  • 2016/06/27 16:27

    ありがとうございます。
    自分もいつか答える側に成長していきたいです。
    がんばります!

    キャンセル

0

日付が一つでしたらinsertは可能ですが、複数の場合はinsertできませんでした。

5レコード作りたいならば、5回に分けてインサートしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/25 15:27

    ご回答、ありがとうございます。どのように記述すればよいか教えて頂けますでしょうか。
    一行の場合、
    「$sql = "insert into calendartbl (holiday) values ('ポストされた値')";」でできますが、5回となるとこの文を5回書くということでしょうか?

    キャンセル

  • 2016/06/25 15:30

    自分で書くなら、
    1. POSTされた値をカンマ区切りで配列に分割
    2.配列の数だけループしつつ
    $sql = "insert into calendartbl (holiday) values (配列[添字])";
    をまわしていれますね。

    キャンセル

  • 2016/06/27 16:13

    ご回答、ありがとうございます。ttyp03さんの方法でできました。おそらく、azurite2016さんも同じような方法を教えてくださったかと思いますが、explodeの概念やループの回し方に理解がまだでしたので、書けませんでした。

    キャンセル

0

挿入したい箇所にidのみを登録し、新たにそのidをキーにしたtableを作成することで実現します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/25 15:26

    ご回答、ありがとうございます。どのように記述すればよいか教えて頂けますでしょうか。
    一行の場合、
    「$sql = "insert into calendartbl (holiday) values ('ポストされた値')";」でできますが、例など教えて頂けたら幸いです。

    キャンセル

  • 2016/06/25 15:45

    質問箇所が明確で無いので、回答しにくいですが、既存の table(calendartbl?) の特定のカラムに適当な id を insert します。
    次に新しい table を作り、先ほど特定カラムに挿入した id と並列したい値をセットで挿入します。

    挿入の仕方が不明な場合は新しく質問を立てるか、過去の質問を検索して下さい。

    キャンセル

  • 2016/06/27 16:08

    ご回答、ありがとうございます。ttyp03さんの方法でできました。ありがとうございます。

    キャンセル

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

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