2013-10-31 12 views
15

Tôi có một bảng người. Mỗi người có tài sản và nhiều người có thể có một tài sản nhất định. Đây là mối quan hệ nhiều-nhiều. Đây là schema:MySQL - Cách chèn vào bảng có mối quan hệ nhiều-nhiều

CREATE TABLE persons (
    person_id int(11) NOT NULL AUTO_INCREMENT, 
    firstname varchar(30) NOT NULL, 
    lastname varchar(30) NOT NULL, 
    PRIMARY KEY (person_id) 
); 

CREATE TABLE properties (
    property_id int(11) NOT NULL AUTO_INCREMENT, 
    property varchar(254) NOT NULL UNIQUE, 
    PRIMARY KEY (property_id) 
); 

CREATE TABLE has_property (
    person_id int(11) NOT NULL, 
    property_id int(11) NOT NULL, 
    PRIMARY KEY (person_id,property_id), 
    FOREIGN KEY (person_id) REFERENCES persons (person_id), 
    FOREIGN KEY (property_id) REFERENCES properties (property_id) 
); 

Bây giờ cho phép nói rằng tôi muốn chèn vào cơ sở dữ liệu người này:

  • firstname: 'John'
  • lastname: 'Doe'
  • thuộc tính:' property_A ',' property_B ',' property_C '

người

+-----------+-----------+----------+ 
| person_id | firstname | lastname | 
+-----------+-----------+----------+ 
|   1 | John  | Doe  | 
+-----------+-----------+----------+ 

tính

+-------------+------------+ 
| property_id | property | 
+-------------+------------+ 
|   1 | property_A | 
|   2 | property_B | 
|   3 | property_C | 
+-------------+------------+ 

has_property

+-----------+-------------+ 
| person_id | property_id | 
+-----------+-------------+ 
|   1 |   1 | 
|   1 |   2 | 
|   1 |   3 | 
+-----------+-------------+ 

Cho đến nay điều tốt nhất tôi có thể nghĩ là để làm một chèn thường xuyên trong bảng người:

INSERT INTO persons (firstname,lastname) VALUES ('John','Doe'); 

và sau đó làm một lựa chọn để tìm id của người tôi vừa chèn

SELECT person_id FROM persons WHERE firstname='John' AND lastname='Doe'; 

để chèn vào hai bảng khác (vì tôi cần biết person_id). Nhưng tôi nghĩ rằng phải có một cách tốt hơn, phải không?

+2

Bạn có thể sử dụng 'CHỌN LAST_INSERT_ID()' để lấy Id của hàng chèn cuối cùng –

+2

Đối với những người có thể nói rằng đây là một bản sao, tôi đã đọc câu hỏi này http://stackoverflow.com/questions/ 17767973/chèn-dữ liệu-vào-một-bàn-đó-có-một-nhiều-nhiều-mối quan hệ nhưng nó là mơ hồ và nó đã không giúp tôi. –

Trả lời

23

Đây là những gì tôi đã kết thúc. Tôi hi vọng nó giúp ích cho ai đó.

INSERT INTO persons (firstname,lastname) VALUES ('John','Doe'); 
SET @person_id = LAST_INSERT_ID(); 

INSERT IGNORE INTO properties (property) VALUES ('property_A'); 
SET @property_id = LAST_INSERT_ID(); 
INSERT INTO has_property (person_id,property_id) VALUES(@person_id, @property_id); 

INSERT IGNORE INTO properties (property) VALUES ('property_B'); 
SET @property_id = LAST_INSERT_ID(); 
INSERT INTO has_property (person_id,property_id) VALUES(@person_id, @property_id); 

INSERT IGNORE INTO properties (property) VALUES ('property_C'); 
SET @property_id = LAST_INSERT_ID(); 
INSERT INTO has_property (person_id,property_id) VALUES(@person_id, @property_id); 
Các vấn đề liên quan