2017-12-30 24 views
0

これを正確に表現する方法がわからないので、ここで説明します。2つのINSERT INTOに参加する

私は小さなwebappを設計しており、私のデータベースにはuserscommits、およびuserCommitsのテーブルがあります。 usersには自動番号であるIDがあり、commitsには同様のID列があるため、最小限です。今すぐuserCommitsは、次の図に示すようにそれらをリンクします。

https://i.gyazo.com/1d8ad47a2bad919efe5a5e8f7f9e4e82.png

私がやったことはINSERT INTO commits (...) VALUES (...)であるが、それに伴う問題は、userCommits.commitIDが正しいコミット等しくなるように、私はuserCommitsにリンクを作成するにはどうすればよいです。私はちょうど最新のものを見つけてそのIDを使うためにテーブルに問い合わせるべきではないと思う。何とかIDに加わる方法はありますか?

私はこのようなクエリを実行して、電子メールでユーザーにコミットをすべて一覧表示できることを知っています。

SELECT 
commits.id, 
commits.cName, 
users.email 
FROM 
commits 
INNER JOIN userCommits ON commits.id = userCommits.commitID 
INNER JOIN users ON userCommits.userID = users.id 
WHERE users.email = "[email protected]" 

私が今やっていることは、ユーザーがコミットを作成したときにデータベースに挿入することです。

答えて

2

あなたが挿入を実行し、一つのテーブルに同じコマンドの一部として挿入されたIDを選択し、あなたのアプリケーションは、両方のIDの知識を持っていたら

、それはusercommitsに挿入することができ、他のテーブルに対して同じことを行いますテーブル

は、だから私は、私はCodeIgniterのを使用していた言及しなかったGet the new record primary key ID from mysql insert query?

+0

これはまさに私が求めていたものです。私が1時間探しているうちに、どうやってこれを見つけられなかったのか分かりません。 – MatthewEnderle

+0

すべてのDBはそれほど変わっていませんが、sqlserverを使って作業すると、MySQLはSELECTのscope_identity()を除いてMySQLとかなりよく似ていますが、oracleはinsert文自体に特定の 'RETURNING'行の挿入中に計算された値を返すために使用できます。時にはグーグルリングは、あなたが何を1つのDBで知っている方が簡単です - 私は多くのMySQLを使用していませんが、 "MySQL同等の選択スコープのアイデンティティ"を検索すると、 –

0

を参照してください。私の悪い。しかし、提供されたソリューションは機能します。私はちょうど実際にこれに遭遇するかもしれない他の人々のために使用されているものを投稿したい。

私はmySQLについて学んだので、各クライアントはそれ自身のセッションを取得します。つまり、$this->db->insert_id(),またはSELECT LAST_INSERT_ID();に電話すると、最後に入力されたIDが返され、最後に入力されたIDは返されません。

$commitData = array(
      'cName'  => $this->input->post('commitName'), 
      'cLocation'  => $this->input->post('location'), 
      'cStartDate'  => $this->input->post('startDate'), 
      'cEndDate'  => $this->input->post('endDate') 
     ); 

$this->db->insert('commits', $commitData); 

$userData = array(
      'commitID'  => $this->db->insert_id(), 
      'userID'  => $user->id 
     ); 

$this->db->insert('userCommits', $userData); 

明らかに、これを中心にセキュリティが構築されますが、これは基本的なナットとボルトです。