16

あるテーブル 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");
4

5 に答える 5

40

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;
于 2010-06-28T15:33:01.810 に答える
13

テーブルを id で降順に並べ、結果の数を 1 つに制限することができます。

SELECT id FROM tablename ORDER BY id DESC LIMIT 1

BUT: このリクエストのテーブル全体ORDER BYを再配置します。したがって、大量のデータがあり、この操作を数回繰り返す必要がある場合、このソリューションはお勧めしません。

于 2016-07-29T10:50:12.693 に答える
1

列の最大値を取得してインクリメントできます。

InnoDB は次のアルゴリズムを使用して、ai_col という名前の AUTO_INCREMENT カラムを含むテーブル t の自動インクリメント カウンターを初期化します。

SELECT MAX(ai_col) FROM t FOR UPDATE;

InnoDB は、ステートメントによって取得された値を 1 つインクリメントし、それをカラムとテーブルの自動インクリメント カウンタに割り当てます。テーブルが空の場合、 InnoDB は値 1 を使用します。

また、 SHOW TABLE STATUSとその「Auto_increment」値を使用することもできます。

于 2010-06-28T15:35:10.257 に答える
0

すべてのレコードにタイムスタンプを追加して最新のものを取得すると思います。この状況では、任意の ID を取得し、行をパックし、その他の操作を行うことができます。

于 2010-06-28T15:34:43.570 に答える