sql >> Base de Datos >  >> RDS >> Mysql

MySQL relación de muchos a muchos con FOREIGN KEYS

No verás nada en Films_Genres tabla hasta que insertes explícitamente algo en ella. La integridad referencial a través de PK y FK no es para llenar tus tablas por ti.

Su código MySql para insertar un nuevo registro en Films_Genres , si se trata de una nueva película que corresponde a un nuevo género, podría parecerse

INSERT INTO Films (Title) VALUES ('Title1');
SET @film_id = LAST_INSERT_ID();

INSERT INTO Genres (Name) VALUES ('Genre1');
SET @genre_id = LAST_INSERT_ID();

INSERT INTO Films_Genres (film_id, genre_id) VALUES(@film_id, @genre_id);

En el lado de php para obtener una identificación recién asignada para un campo autoincrementado, use $mysqli->insert_id .

Ahora, si desea crear una nueva película y asignarla a varios géneros a la vez, puede hacerlo

INSERT INTO Films (Title) VALUES ('Title2');
SET @film_id = LAST_INSERT_ID();
-- if you get ids of genre from your UI just use them
INSERT INTO Films_Genres (film_id, genre_id) 
SELECT @film_id, id
  FROM Genres
 WHERE id IN (2, 3, 4);

INSERT INTO Films (Title) VALUES ('Title3');
SET @film_id = LAST_INSERT_ID();
-- if you names of genres you can use them too
INSERT INTO Films_Genres (film_id, genre_id) 
SELECT @film_id, id
  FROM Genres
 WHERE Name IN ('Genre2', 'Genre4');

Aquí está SQLFiddle demostración