[英]Inserting values from one table to another table sql and php
我目前正在使用 PHP 和一點 OOP 做一個圖書出租系統。 我正在嘗試將表書(id,bookTitle)和表用戶(user_id,全名)中的信息插入表借書,但我不知道如何。 我只是 PHP 的初學者
TABLE BOOK
id | bookId | bookTitle | authorName
TABLE USERS
user_id | uname | upass | fullname | uemail
TABLE BORROWBOOK
borrow_id | borrowDate | returnDate | b_Title | u_Borrower | status | b_id | u_id
u_id 和 b_id 是 user_id 和 id 的外鍵
這是 output
這是代碼
<?php
class Borrow {
public $bookId;
public $bookTitle;
public $bookAuthor;
public $id;
public $a_id;
public $authorId;
public $fName;
public $lName;
public $borrow_id;
public $borrowDate;
public $returnDate;
public $b_Title;
public $u_Borrower;
public $status;
private $conn;
public function __construct($db) {
$this->conn = $db;
}
public function displayAll() {
$sql = "SELECT * FROM book";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
return $stmt;
}
public function displayRequest() {
$sql = "SELECT * FROM borrowbook";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
return $stmt;
}
public function selectBook() {
$sql = "SELECT *
FROM book as A
LEFT JOIN borrowbook AS BK ON A.bookId = BK.b_id
LEFT JOIN users AS U ON U.user_id = BK.u_id
WHERE id = ?";
//$sql = "SELECT * FROM book WHERE id = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bindparam(1, $this->id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->id = $row['id'];
$this->bookId = $row['bookId'];
$this->bookTitle = $row['bookTitle'];
$this->authorName = $row['authorName'];
}
public function insertBook() {
$sql = "INSERT INTO borrowbook SET borrowDate = ?, returnDate = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bindparam(1, $this->borrowDate);
$stmt->bindparam(2, $this->returnDate);
$stmt->execute();
}
public function insertInfo() {
$sql = "INSERT INTO borrowbook (u_Borrower, b_Title, b_id, u_id)
SELECT u.fullname, b.bookTitle, b.id, u.user_id
FROM users AS u, book AS b
WHERE u.user_id = b.id WHERE id = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bindparam(1, $this->id);
$stmt->execute();
}
public function readAll($from_record_num, $records_per_page) {
$sql = "SELECT * FROM book ORDER BY bookId ASC LIMIT {$from_record_num}, {$records_per_page}";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
return $stmt;
}
public function countAll() {
$sql = "SELECT id FROM book";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
$num = $stmt->rowCount();
return $num;
}
}
?>
<!-- INSERT INTO `bookborrow`(`b_id`, `b_Title`, `u_Borrower`) VALUES ((SELECT id FROM book WHERE id = 1),(SELECT bookTitle FROM book WHERE id = 1), (SELECT authorName FROM book WHERE id = 1)); -->
<!-- INSERT INTO `borrowbook`(`borrowDate`, `returnDate`, `b_Title`, `u_Borrower`, `status`) VALUES('June 10', 'June 13', (SELECT bookTitle FROM book WHERE id = 1), (SELECT fullname FROM users WHERE user_id = 5), 1) -->
一些東西:
借用表連接 book 和 user 表,因此您需要每個表的 id:
插入借來的書:
public function insertInfo($user_id, $book_id) {
$sql = "INSERT INTO borrowbook (u_Borrower, b_Title, b_id, u_id)
SELECT u.fullname, b.bookTitle, b.id, u.user_id
FROM users AS u, book AS b
WHERE u.user_id = {$user_id} AND b.id = {$book_id}";
$stmt = $this->conn->prepare($sql);
$stmt->execute();
}
更新行時,使用 UPDATE,而不是 INSERT。 並確保包含 where 子句,否則每一行都會被更新。
更新書:
public function updateBook($user_id, $book_id) {
$sql = "UPDATE borrowbook SET borrowDate = ?, returnDate = ? WHERE u_id = {$user_id} AND b_id = {$book_id}";
$stmt = $this->conn->prepare($sql);
$stmt->bindparam(1, $this->borrowDate);
$stmt->bindparam(2, $this->returnDate);
$stmt->execute();
}
正如@Barmar 提到的,在加入表時,您只想存儲 ID 和新信息。 不要保存書名,因為它已經存儲在書表中。
借用表的首選結構是這樣的:
TABLE BORROWBOOK
borrow_id | borrowDate | returnDate | status | b_id | u_id
如果將狀態移動到書表,則可以使用以下方法更新狀態:
public function setBookStatus() {
$sql = "UPDATE book SET status = ? WHERE id = ?";
$stmt = $this->conn->prepare($sql);
$stmt->bindparam(1, $this->status);
$stmt->bindparam(2, $this->b_id);
$stmt->execute();
}
在頁面中,您需要存儲圖書 id (b_id) 以進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.