sql >> Database teknologi >  >> RDS >> Mysql

MySQL mange-til-mange forhold til UDENLANDSKE NØGLER

Du vil ikke se noget i Films_Genres tabel, indtil du udtrykkeligt indsætter noget i den. Referentiel integritet gennem PK og FK er ikke til at udfylde dine tabeller for dig.

Din MySql-kode til at indsætte en ny post i Films_Genres , hvis det er en ny film, der svarer til en ny genre, kan se ud som

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

På php-siden for at få et nyligt tildelt id til et autoinkrementeret felt, brug $mysqli->insert_id .

Hvis du nu vil oprette en ny film og tildele den til flere genrer på én gang, kan du gøre

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

Her er SQLFiddle demo



  1. SQL Server Failover Cluster Installation -1

  2. phpMyAdmin - Fejl> Forkert formatparameter?

  3. Forbind MySQL med Python 3.6

  4. INT vs Unique-Identifier for ID-felt i databasen