mysql - una - relacion muchos a muchos tabla intermedia
MySQL-Cómo insertar en una tabla que tiene una relación de muchos a muchos (1)
Esto es lo que terminé haciendo. Espero que esto ayude a alguien.
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);
Tengo una mesa de personas. Cada persona tiene una propiedad y muchas personas pueden tener una propiedad determinada. Así que esta es una relación de muchos a muchos. Este es el esquema:
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)
);
Ahora digamos que quiero insertar en la base de datos esta persona:
- nombre de pila: ''john''
- apellido: ''Doe''
- propiedades: ''propiedad_A'', ''propiedad_B'', ''propiedad_C''
personas
+-----------+-----------+----------+
| person_id | firstname | lastname |
+-----------+-----------+----------+
| 1 | John | Doe |
+-----------+-----------+----------+
propiedades
+-------------+------------+
| property_id | property |
+-------------+------------+
| 1 | property_A |
| 2 | property_B |
| 3 | property_C |
+-------------+------------+
has_property
+-----------+-------------+
| person_id | property_id |
+-----------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------+-------------+
Hasta ahora, lo mejor que he pensado es hacer un inserto regular en la tabla de personas:
INSERT INTO persons (firstname,lastname) VALUES (''John'',''Doe'');
y luego haga una selección para encontrar el ID de la persona que acabo de insertar
SELECT person_id FROM persons WHERE firstname=''John'' AND lastname=''Doe'';
para poder insertarlo en las otras dos tablas (porque necesito conocer el person_id). Pero creo que debe haber una mejor manera, ¿no es así?