php – MySQL与FOREIGN KEYS的多对多关系

前端之家收集整理的这篇文章主要介绍了php – MySQL与FOREIGN KEYS的多对多关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在我的 MySQL数据库中创建一个多对多的关系.我有三张桌子:
电影,流派和电影.我使用以下代码来设置它们:
CREATE TABLE Films
(  
    id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),Title VARCHAR(255)
),CREATE TABLE Genres
(  
    id INT NOT NULL AUTO_INCREMENT,Name VARCHAR(255)
),CREATE TABLE Films_Genres
(
    film_id INT NOT NULL,genre_id INT NOT NULL,PRIMARY KEY (film_id,genre_id),FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,FOREIGN KEY (genre_id) REFERENCES Genres(id) ON UPDATE CASCADE
)

但是,当我尝试在表中插入一些值时:

INSERT INTO Films (Title) VALUES ('$title')
INSERT INTO Genres (Name) VALUES ('$genre')

我可以看到新的电影电影表和新类型的流派表,但是
Films_Genres表不更新 – 没有新行(我正在通过PHPMyAdmin检查).

我究竟做错了什么?

在您明确插入某些内容之前,您将不会在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获取一个新分配的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,id
  FROM Genres
 WHERE Name IN ('Genre2','Genre4');

这是SQLFiddle演示

猜你在找的PHP相关文章