varios una tabla relacion muchos llenar intermedia ejemplos ejemplo datos como codigo cardinalidad mysql many-to-many relationship sql-insert

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í?