sql >> Databáze >  >> RDS >> Mysql

Vztah MySQL many-to-many s FOREIGN KEYS

V Films_Genres nic neuvidíte tabulky, dokud do ní něco výslovně nevložíte. Referenční integrita prostřednictvím PK a FK není pro naplňování vašich tabulek za vás.

Váš MySql kód pro vložení nového záznamu do Films_Genres , pokud se jedná o nový film, který odpovídá novému žánru, může vypadat

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

Na straně php k získání nově přiřazeného ID pro automaticky inkrementované pole použijte $mysqli->insert_id .

Nyní, pokud chcete vytvořit nový film a přiřadit jej k více žánrům najednou, můžete

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

Zde je SQLFiddle demo



  1. Jak HANDLER FOR NOT FOUND funguje a jaké je jeho použití?

  2. MySQL:Udělte **všechna** oprávnění k databázi

  3. 5 velmi častých chyb návrhu SQL dotazů, kterým se za každou cenu vyhnout

  4. Seskupte více výsledků mysql podle hodnoty jednoho sloupce