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

MySQL molti-a-molti relazione con CHIAVI STRANIERE

Non vedrai nulla in Films_Genres tabella fino a quando non inserisci esplicitamente qualcosa al suo interno. L'integrità referenziale tramite PK e FK non serve a popolare le tue tabelle per te.

Il tuo codice MySql per inserire un nuovo record in Films_Genres , se si tratta di un nuovo film che corrisponde a un nuovo genere, potrebbe assomigliare a

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

Sul lato php per ottenere un ID appena assegnato per un campo autoincrementato, utilizzare $mysqli->insert_id .

Ora, se vuoi creare un nuovo film e assegnarlo a più generi contemporaneamente, puoi farlo

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

Ecco SQLFiddle demo