Ho una tabella di persone. Ogni persona ha una proprietà e molte persone possono avere una certa proprietà. Quindi questa è una relazione molti-a-molti. Questo è lo schema:MySQL - Come inserire nella tabella che ha relazione molti-a-molti
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)
);
Ora Diciamo che voglio inserire nel database di questa persona:
- Cognome: 'John'
- Cognome: 'Doe'
- proprietà:' property_A', 'property_B', 'property_C'
persone
+-----------+-----------+----------+
| person_id | firstname | lastname |
+-----------+-----------+----------+
| 1 | John | Doe |
+-----------+-----------+----------+
proprietà
+-------------+------------+
| property_id | property |
+-------------+------------+
| 1 | property_A |
| 2 | property_B |
| 3 | property_C |
+-------------+------------+
has_property
+-----------+-------------+
| person_id | property_id |
+-----------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------+-------------+
Finora la cosa migliore che ho pensato è quello di fare un inserto regolare nella tabella persone:
INSERT INTO persons (firstname,lastname) VALUES ('John','Doe');
e poi fare una selezione per trovare l'ID della persona che ho appena inserito
SELECT person_id FROM persons WHERE firstname='John' AND lastname='Doe';
per inserire nelle altre due tabelle (perché ho bisogno di conoscere la person_id). Ma penso che ci debba essere un modo migliore, non è vero?
È possibile utilizzare 'SELEZIONA LAST_INSERT_ID()' per recuperare l'ID dell'ultima riga inserita –
Per coloro che possono dire che questo è un duplicato, ho letto questa domanda http://stackoverflow.com/questions/ 17767973/inserimento-dati-in-un-tavolo-che-ha-un-molti-a-molti-relazione ma era vago e non mi ha aiutato. –