Mysql
 sql >> база данни >  >> RDS >> Mysql

Връзка на MySQL много към много с ВЪНШНИ КЛЮЧОВИ

Няма да видите нищо в Films_Genres таблица, докато изрично не вмъкнете нещо в нея. Референтната цялост чрез PK и FK не е за попълване на вашите таблици вместо вас.

Вашият MySql код за вмъкване на нов запис в Films_Genres , ако това е нов филм, който отговаря на нов жанр, може да изглежда така

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

От php страна, за да получите новоприсвоен идентификатор за автоматично инкрементирано поле, използвайте $mysqli->insert_id .

Сега, ако искате да създадете нов филм и да го присвоите към няколко жанра едновременно, можете да го направите

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

Ето SQLPiddle демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL функция за намиране на броя на работните дни между две дати

  2. UNPIVOT mysql данни към друга таблица

  3. Извличане на редове, групирани по час с MySQL

  4. Връзките към проекта не работят на Wamp Server

  5. Cronjob или MySQL събитие?