sql >> データベース >  >> RDS >> Mysql

MySQLとFOREIGNKEYSとの多対多の関係

    Films_Genresには何も表示されません 明示的に何かを挿入するまでテーブル。PKおよびFKによる参照整合性は、テーブルにデータを入力するためのものではありません。

    Films_Genresに新しいレコードを挿入するためのMySqlコード 、新しいジャンルに対応する新しい映画の場合は、次のようになります

    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側で、自動インクリメントされたフィールドに新しく割り当てられたIDを取得するには、を使用します。 $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');
    

    これがSQLFiddle です。 デモ



    1. データベース開発自動化のためのDevOpsソリューション

    2. MySQLの特定の列の後に複数の列を追加する

    3. Zend_Db:SSHトンネルを介してMySQLデータベースに接続する方法は?

    4. MySQL変換関数