Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Many-to-Many-Beziehung mit FOREIGN KEYS

In Films_Genres wird nichts angezeigt Tabelle, bis Sie explizit etwas darin einfügen. Die referenzielle Integrität durch PK und FK dient nicht dazu, Ihre Tabellen für Sie zu füllen.

Ihr MySql-Code zum Einfügen eines neuen Datensatzes in Films_Genres , wenn es sich um einen neuen Film handelt, der einem neuen Genre entspricht, könnte so aussehen

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

Auf der PHP-Seite verwenden Sie , um eine neu zugewiesene ID für ein automatisch inkrementiertes Feld zu erhalten $mysqli->insert_id .

Wenn Sie jetzt einen neuen Film erstellen und ihn mehreren Genres gleichzeitig zuweisen möchten, können Sie das tun

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

Hier ist SQLFiddle demonstrieren