質問

私は、私は非常に簡単でなければならないと考えていることMySQLの質問があります。私は、次のMySQLクエリを実行すると、TABLE1から最後に挿入されたIDを返す必要があります:

INSERT INTO table1 (title,userid) VALUES ('test',1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();

私は間を表2に挿入しても、あなたは私がTABLE1からIDを取得する方法だけではなく、テーブル1の表2の最後のINSERT IDを返します。現在のコードを、理解することができたよう?

役に立ちましたか?

解決

あなたは変数に最後のインサートIDを格納することができます:

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO table2 (parentid,otherid,userid) VALUES (@last_id_in_table1, 4, 1);    

またはGET最大のid FRM TABLE1

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(), 4, 1); 
SELECT MAX(id) FROM table1;   

他のヒント

あなたが実際に第二のテーブルに以前LAST_INSERT_ID()を格納しているので、

、あなたはそこからそれを得ることができます:

INSERT INTO table1 (title,userid) VALUES ('test',1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT parentid FROM table2 WHERE id = LAST_INSERT_ID();

これは、あなたが2つの異なるテーブルに行を挿入することができ、あまりにも両方のテーブルへの参照を作成します。

START TRANSACTION;
INSERT INTO accounttable(account_username) 
    VALUES('AnAccountName');
INSERT INTO profiletable(profile_account_id) 
    VALUES ((SELECT account_id FROM accounttable WHERE account_username='AnAccountName'));
    SET @profile_id = LAST_INSERT_ID(); 
UPDATE accounttable SET `account_profile_id` = @profile_id;
COMMIT;

私はbashで同じ問題を抱えていたし、私はこのような何かをやってます:

mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');"
罰金に動作します。

:-)しかし、

mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');set @last_insert_id = LAST_INSERT_ID();"
mysql -D "dbname" -e "insert into table2 (id_tab1) values (@last_insert_id);"

は動作しません。最初のコマンドの後に、シェルは、MySQLからログアウトされ、2番目のコマンドのために再度ログインした後、変数@last_insert_idがもはや設定されていないため。 私の解決策はあります:

lastinsertid=$(mysql -B -N -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');select LAST_INSERT_ID();")
mysql -D "dbname" -e "insert into table2 (id_tab1) values (${lastinsertid});"

たぶん誰かが解決策のためのbashを探している: - )

後でそれを使用してPHPの変数にlast_id_in_table1変数を保存することは可能でしょうか?

これで私は私が必要、このlast_idと別のテーブルに一部のレコードを添付する必要がありlast_idます:

1)INSERTを行うとlast_id_in_table1

を取得します
INSERT into Table1(name) values ("AAA"); 
SET @last_id_in_table1 = LAST_INSERT_ID();
別のテーブル内の任意のindeterminated行は、

2)、インサートに発生last_id_insertでこれらの行を更新します。

$element = array(some ids)    
foreach ($element as $e){ 
         UPDATE Table2 SET column1 = @last_id_in_table1 WHERE id = $e 
    }
無InnoDBのソリューションについては、

:あなたが手順を使用することができます don't forgot to set the the delimiter for storing the procedure with ;

CREATE PROCEDURE myproc(OUT id INT, IN otherid INT, IN title VARCHAR(255))
BEGIN
LOCK TABLES `table1` WRITE;
INSERT INTO `table1` ( `title` ) VALUES ( @title ); 
SET @id = LAST_INSERT_ID();
UNLOCK TABLES;
INSERT INTO `table2` ( `parentid`, `otherid`, `userid` ) VALUES (@id, @otherid, 1); 
END

そして、あなたはそれを使用することができます...

SET @myid;
CALL myproc( @myid, 1, "my title" );
SELECT @myid;

最後と最後から二番目の場合:

INSERT INTO `t_parent_user`(`u_id`, `p_id`) VALUES ((SELECT MAX(u_id-1) FROM user) ,(SELECT MAX(u_id) FROM user  ) );

だけではなく、LAST_INSERT_IDのロドリゴ・ポスト、(のために追加する)クエリで使用すると、TABLE1から選択したMAX(id)を使用することができます;,しかし、あなたが使用する必要があります()、

INSERT INTO table1 (title,userid) VALUES ('test', 1)
INSERT INTO table2 (parentid,otherid,userid) VALUES ( (SELECT MAX(id) FROM table1), 4, 1)

私たちは、レコードを入力する1人を持っているので、私はすぐに挿入、次の次のクエリを実行します:

$result = $conn->query("SELECT * FROM corex ORDER BY id DESC LIMIT 1");

while ($row = $result->fetch_assoc()) {

            $id = $row['id'];

}

これは、データベースから最後のIDを取得します。

あなたはあなたのコードに入れて別のクエリ、なしで、あなたのクエリの後、MySQLからの最後の自動増分IDを持っている必要がある場合:

mysql_insert_id();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top