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

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

ただいまの
回答率

87.34%

PHP MySQL 別テーブル条件参照の値複数を、別テーブルへINSERTする方法について

解決済

回答 2

投稿 編集

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

score 2

この度は初めてこちらの掲示板にて質問させて頂きます。
よろしくお願い致します。

質問としましては、phpMyadminでの「別テーブルから値を参照してINSERTする方法」でして、
色々調べてみたのですが、構造/方法が分かりませんでしたため質問に至りました。

MySQLの初心者ですため、説明不足な点や方法に難がありましたら、
ご指摘いただければ幸いです。

やりたい事を簡単に申し上げますと、
TABLE.1 の条件(mozi01、mozi02、mozi03)に一致した値(cid)を、TABLE.2 へ書き込みしたく思います。
※ テーブルの構造を下記へ記載させていただきます。

1件だけの場合、

INSERT INTO `tbl2` ( id01, id02, txt01 )
VALUES ( 'CODE001', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'AAA' AND `mozi02` Like '111' AND `mozi03` Like 'いいい') )


で書き込みをする事が出来ましたが、書き込むデータが 5回/日、500件/回 程度あります。
500件も毎回のクエリを実行(下記記載)するのも合理的ではない気がしますため、その方法をお尋ねしたく思っております。

INSERT INTO `tbl2` ( id01, id02, txt01 )
VALUES 
( 'CODE001', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'AAA' AND `mozi02` Like '111' AND `mozi03` Like 'いいい') ),
( 'CODE002', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'BBB' AND `mozi02` Like '222' AND `mozi03` Like 'いいい') ),
( 'CODE003', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'CCC' AND `mozi02` Like '111' AND `mozi03` Like 'おおお') )
.
.
(500行)

初歩的な質問かと思いますが、ご教授いただければ幸いです。
どうぞ、よろしくお願い致します。

【テーブル構造】
■ TABLE.1

CREATE TABLE `tbl1` (
  `cid` int(6) NOT NULL,
  `mozi01` varchar(5) NOT NULL,
  `mozi02` varchar(5) NOT NULL,
  `mozi03` varchar(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tbl1` (`cid`, `mozi01`, `mozi02`, `mozi03`) VALUES
(2, 'AAA', '111', 'いいい'),
(6, 'AAA', '444', 'えええ'),
(1, 'AAA', '555', 'あああ'),
(3, 'BBB', '222', 'いいい'),
(4, 'CCC', '111', 'おおお'),
(5, 'WWW', '888', 'あああ');

ALTER TABLE `tbl1`
  ADD PRIMARY KEY (`cid`),
  ADD UNIQUE KEY `mozi01` (`mozi01`,`mozi02`,`mozi03`);

■ TABLE.2

CREATE TABLE `tbl2` (
  `id01` varchar(10) NOT NULL,
  `id02` int(6) DEFAULT NULL,
  `txt01` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `tbl2`
  ADD PRIMARY KEY (`id01`);
COMMIT;
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • qweqwe

    2019/08/19 09:34

    早朝からご返信いただき、ありがとうございます。

    現状の流れとしまして、
    1. APIに接続し、結果を配列で取得
    2. 1のデータをテーブルへ書き込み
     T1. 取引先Tbl
     T2. 受注Tbl
    となっています。

    T2受注Tblへ取引先情報をINSERTしても良いのですが、
    重複する情報(リピート取引先)がかなり多いため、取引先情報は取引先コード(オートナンバー)を振り別テーブルへ保存し、
    T2受注Tbl書き込み時、T1取引先Tblを参照し、T1取引先コードを書き込みしたく思っております。
    言葉足らずで失礼致しました。

    そもそも、DBの構造が間違えているのでしょうか、、とも疑うべきなのでしょうか。。

    キャンセル

  • 8zca

    2019/08/19 23:32

    すでにT2は取引先IDを持っているということですね。
    現状の処理でできているのであれば、質問されているような処理がなぜ必要なのかが不明になってきました。
    何を実現したくて今の質問されている処理が必要なのでしょうか?

    キャンセル

  • qweqwe

    2019/08/28 14:53

    返信にお時間がかかり、失礼致しました。

    仰るとおり、T2. 受注Tbl は既に取引先IDを所持したテーブルとなっております。
    そこで、取引先A社と新規に取引する場合、T2. 受注Tbl に情報を登録し、AIで取引先IDを連番で設定しますが、
    数カ月後、再度A社と取引する場合、 既存の 取引先ID を取得したいと思っております。

    用途としまして、毎回取引先の住所や情報をデータベースに保持していくのは
    膨大なデータ容量となるため、取引先IDで関連付けしたいと思っております。

    お伝えベタで申し訳ございませんが、伝わりましたでしょうか。
    どうぞ、よろしくお願いいたします。

    キャンセル

回答 2

check解決した方法

0

自己解決いたしました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

insert文で、selectの結果をinsertすることが出来ます。

mysql5.6 insert

select文にtbl1に追加したいクエリを記述することで実現できそうですね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/08/19 06:36

    回答いただき、ありがとうございます。
    こちらのリファレンスを確認しましたが、テーブルの条件が合う行を別テーブルに入れる例でしたが、
    各行条件が異なる場合も利用できるのでしょうか。
    少し調べさせていただきます。

    キャンセル

  • 2019/08/19 09:34

    希望の条件がselect文として記載できるのであれば、利用可能です。
    実行速度を気にしないのであれば、union句なども利用することで柔軟にクエリを記述できるかと思います。

    キャンセル

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

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

関連した質問

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