あるテーブル A の ID を取得して、別のテーブル B に挿入しようとしています。A に何も挿入していないため、last_insert_id() を使用できません。これをうまく行う方法についてのアイデアはありますか?
$n = mysql_query("SELECT max(id) FROM tablename");
うまくいかないようです
$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");
あるテーブル A の ID を取得して、別のテーブル B に挿入しようとしています。A に何も挿入していないため、last_insert_id() を使用できません。これをうまく行う方法についてのアイデアはありますか?
$n = mysql_query("SELECT max(id) FROM tablename");
うまくいかないようです
$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");
MySQL では、これはid
列から最高値を返します。
SELECT MAX(id) FROM tablename;
ただし、これはそのIDをに入れません$n
:
$n = mysql_query("SELECT max(id) FROM tablename");
値を取得するには、次のようにする必要があります。
$result = mysql_query("SELECT max(id) FROM tablename");
if (!$result) {
die('Could not query:' . mysql_error());
}
$id = mysql_result($result, 0, 'id');
A から最後の挿入 ID を取得し、それを B に挿入する場合は、次の 1 つのコマンドで実行できます。
INSERT INTO B (col) SELECT MAX(id) FROM A;
テーブルを id で降順に並べ、結果の数を 1 つに制限することができます。
SELECT id FROM tablename ORDER BY id DESC LIMIT 1
BUT: このリクエストのテーブル全体ORDER BY
を再配置します。したがって、大量のデータがあり、この操作を数回繰り返す必要がある場合、このソリューションはお勧めしません。
InnoDB は次のアルゴリズムを使用して、ai_col という名前の AUTO_INCREMENT カラムを含むテーブル t の自動インクリメント カウンターを初期化します。
SELECT MAX(ai_col) FROM t FOR UPDATE;
InnoDB は、ステートメントによって取得された値を 1 つインクリメントし、それをカラムとテーブルの自動インクリメント カウンタに割り当てます。テーブルが空の場合、 InnoDB は値 1 を使用します。
また、 SHOW TABLE STATUSとその「Auto_increment」値を使用することもできます。
すべてのレコードにタイムスタンプを追加して最新のものを取得すると思います。この状況では、任意の ID を取得し、行をパックし、その他の操作を行うことができます。