0

2 つの MySQL テーブルがあり、1 つずつ作成する代わりに複数のレコードを挿入し、ID を取得して関連するレコードを挿入したい

ここにテーブルがあります:

CREATE TABLE `visit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip_address` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

CREATE TABLE `visitmeta` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `page_visit_id` int(11) NOT NULL,
  `key` varchar(255) NOT NULL,
  `value` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
)

現在、訪問時に 1 つのレコードを挿入し、その ID を取得して、訪問メタにレコードを挿入します。訪問に新しいレコードを作成し、同じクエリで訪問メタ レコードを作成する方法はありますか?

4

1 に答える 1

1

1 つのクエリで 2 つのテーブルにレコードを挿入することはできませんが、MySQL のLAST_INSERT_ID()関数を使用すると 2 つのクエリだけで挿入できます。

INSERT INTO visit
  (ip_address)
VALUES
  ('1.2.3.4')
;

INSERT INTO visitmeta
  (page_visit_id, key, value)
VALUES
  (LAST_INSERT_ID(), 'foo', 'bar'),
  (LAST_INSERT_ID(), 'baz', 'qux')
;

また、多くの場合、IP アドレスを未加工の 4 バイト バイナリ形式で保存する方が便利でパフォーマンスが高いことにも注意してください (MySQL のINET_ATON()およびINET_NTOA()関数を使用して、それぞれそのような形式との間で変換できます)。

于 2012-10-14T22:50:47.323 に答える