Mysql
 sql >> Base de données >  >> RDS >> Mysql

Relation MySQL plusieurs-à-plusieurs avec FOREIGN KEYS

Vous ne verrez rien dans Films_Genres jusqu'à ce que vous y insériez explicitement quelque chose. L'intégrité référentielle via PK et FK ne sert pas à remplir vos tables à votre place.

Votre code MySql pour insérer un nouvel enregistrement dans Films_Genres , s'il s'agit d'un nouveau film qui correspond à un nouveau genre, pourrait ressembler à

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);

Du côté php pour obtenir un identifiant nouvellement attribué pour un champ auto-incrémenté, utilisez $mysqli->insert_id .

Maintenant, si vous voulez créer un nouveau film et l'attribuer à plusieurs genres à la fois, vous pouvez le faire

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');

Voici SQLFiddle démo