Saira Banu
Saira Banu

Reputation: 1

How to insert data into 3 tables?

I have 3 tables called book , author, publisher. The relationship between book and author is a resolving table called book_author_link. The main issue is that when a user adds a book, it was not successfully added as some of the fields belonged in multiple tables. Therefore I am currently having trouble with the INSERT query. How do I go about doing this?

Here is my PHP:

$queryInsert = "INSERT INTO book,author,
publishers(title,isbn,author_name,publisher_name,year_published, book_desc,genre_id,keywords) 
FROM book b, author a ,book_author_link ba, publishers p 
VALUES ('$title',$isbn,'$author_name','$publisher_name',$year_published,'$genre_type','‌​$book_desc','$genre_id','$keywords') 
WHERE b.book_id = ba.book_id AND a.author_id = ba.author_id AND b.publisher_id = p.publisher_id";

Here is my book table:

CREATE TABLE IF NOT EXISTS `fyp`.`book` (
`book_id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(45) NOT NULL,
`ISBN` VARCHAR(45) NOT NULL,
`book_desc` VARCHAR(100) NOT NULL,
`year_published` VARCHAR(45) NOT NULL,
`year_of_birth` YEAR NOT NULL,
`image` VARCHAR(45) NULL,
`genre_id` INT NOT NULL,
`publisher_id` INT NOT NULL,
`user_id` INT NOT NULL,
 PRIMARY KEY (`book_id`),
 INDEX `fk_book_publishers1_idx` (`publisher_id` ASC),
 INDEX `fk_book_user1_idx` (`user_id` ASC),
 INDEX `fk_book_genre1_idx` (`genre_id` ASC),
 CONSTRAINT `book_publishers_key`
 FOREIGN KEY (`publisher_id`)
 REFERENCES `fyp`.`publishers` (`publisher_id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION,
 CONSTRAINT `book_user_key`
 FOREIGN KEY (`user_id`)
 REFERENCES `fyp`.`user` (`id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION,
 CONSTRAINT `book_genre_key`
 FOREIGN KEY (`genre_id`)
 REFERENCES `fyp`.`genre` (`genre_id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION)
 ENGINE = InnoDB;   

-- Table fyp.author


CREATE TABLE IF NOT EXISTS `fyp`.`author` (
`author_id` INT NOT NULL AUTO_INCREMENT,
`author_name` VARCHAR(45) NOT NULL,
`year_of_birth` YEAR NOT NULL,
`year_deceased` YEAR NULL,
`image` VARCHAR(45) NULL,
`user_id` INT NOT NULL,
`country_id` INT NOT NULL,
`gender_id` INT NOT NULL,
 PRIMARY KEY (`author_id`),
 INDEX `fk_author_user1_idx` (`user_id` ASC),
 INDEX `fk_author_country1_idx` (`country_id` ASC),
 INDEX `fk_author_gender1_idx` (`gender_id` ASC),
 CONSTRAINT `author_user_key`
 FOREIGN KEY (`user_id`)
 REFERENCES `fyp`.`user` (`id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION,
 CONSTRAINT `author_country_key`
 FOREIGN KEY (`country_id`)
 REFERENCES `fyp`.`country` (`country_id`)
 ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `author_gender_key`
FOREIGN KEY (`gender_id`)
REFERENCES `fyp`.`gender` (`gender_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- Table fyp.publishers


DROP TABLE IF EXISTS `fyp`.`publishers` ;

CREATE TABLE IF NOT EXISTS `fyp`.`publishers` (
`publisher_id` INT NOT NULL,
`publisher_name` VARCHAR(45) NOT NULL,
 PRIMARY KEY (`publisher_id`))
 ENGINE = InnoDB;

-- Table fyp.book_author_link


DROP TABLE IF EXISTS fyp.book_author_link ;

CREATE TABLE IF NOT EXISTS `fyp`.`book_author_link` (
`book_author_link_id` INT NOT NULL AUTO_INCREMENT,
`book_id` INT NOT NULL,
`author_id` INT NOT NULL,
PRIMARY KEY (`book_author_link_id`),
INDEX `fk_book_author_link_book_idx` (`book_id` ASC),
INDEX `fk_book_author_link_author1_idx` (`author_id` ASC),
CONSTRAINT `book_key`
FOREIGN KEY (`book_id`)
REFERENCES `fyp`.`book` (`book_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `author_key`
FOREIGN KEY (`author_id`)
REFERENCES `fyp`.`author` (`author_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Upvotes: 0

Views: 52

Answers (2)

Hytool
Hytool

Reputation: 1368

you could give a try to a trigger AFTER INSERT on the main table.

Upvotes: 0

Oddy
Oddy

Reputation: 142

I recommend running the queries in a transaction: http://php.net/manual/pdo.transactions.php

Also, you might need this to get the AUTO_INCREMENT id: http://php.net/manual/de/pdo.lastinsertid.php

Are you using phpMyAdmin as GUI? Have you tried running your SQL there? If there is a "relationship issue", it should print the exact error message. You should provide it here.

Upvotes: 2

Related Questions