2014-12-04 43 views
0

我正在爲個人開發創建一個庫應用程序,並希望進一步瞭解MySql知識。基本連接表和外鍵

我現在有兩個表 '書籍' 和 '類別'

id title     author  category  isbn 
---- -------     ---------- ---------- ------- 
1 Treasure Chest   Jim Jones  1   14252637 
2 Pirates Boat   Sue Smith  2   88447737 
3 Adventure Land   Harry Jo  3   01918273 
4 Winter Week    Sam Dill  3   00999337 

類別

id  cat_name 
----  -------   
1  Horror 
2  Kids 
3  Fiction 
4  Science 

我做一個簡單的搜索,我想顯示所有書籍(從書中選擇*),我想顯示所有與他們對應的書籍類別。這可以工作,但顯示類別號碼而不是類別名稱。

e.g

id  title   author  category isbn 
2710 Animals 123  Tiny Touch 2  978-1-84958-877-5 
2709 Animal Homes Tiny Touch 2  978-1-84958-880-5 
2708 Black and White Usborne  3  978-1-4095-2393-2 
2707 Babies   Usborne  1  978-1-4095-3575-1 

我怎樣才能改變這種方式,這些表的cat_name和類別註冊了?

我試圖在phpMyAdmin運行命令如下不過它返回一個錯誤;

ALTER TABLE book 
ADD FOREIGN KEY (category) REFERENCES category(cat_name); 

錯誤

#1452 - Cannot add or update a child row: a foreign key constraint fails (`sslib`.`#sql-1ab4_1dae`, CONSTRAINT `#sql-1ab4_1dae_ibfk_1` FOREIGN KEY (`category`) REFERENCES `category` (`cat_name`)) 

PHP

$sql = "SELECT * FROM book"; 
$res = $conn->query($sql) or trigger_error($conn->error."[$sql]"); 
while($row = $res->fetch_array()) { //line 101 

    echo '<tbody>'; 
    echo '<tr>'; 
    echo '<td>' . $row['id'] . '</td>'; 
    echo '<td>' . $row['title'] . '</td>'; 
    echo '<td>' . $row['author'] . '</td>'; 
    echo '<td>' . $row['category'] . '</td>'; 
    echo '<td>' . $row['isbn'] . '</td>'; 
    echo '<td>' . $row['publicationYear'] . '</td>'; 
    echo '</tr>'; 
    echo '</tbody>'; 
}; 

我一直在尋找外鍵和索引,但是我似乎無法讓他們的任何意義。 我對此很新,所以任何幫助,非常感謝。

+3

你需要加入表結合在一起,得到你想要的。更改外鍵引用對查詢不起作用。這種約束是關於關係完整性的,而不是查詢解釋。 – 2014-12-04 13:07:57

回答

3

使SQL參加與它們對應的類別來顯示所有的書:

select 
    b.title as 'book_title', 
    c.cat_name as 'category_name' 
from 
    book b 
    inner join category c on (c.id = b.category); 

當您將新書記錄,您必須確保該類別存在。 MySQL已經通過提供參照完整性(在您的發佈外鍵)來照顧這一點。參照完整性不適用於所有引擎。它在InnoDB中受到支持。首先確保你使用InnoDB,因爲MySQL 5.5是默認的。

你可能想試試MySQL Workbench。它支持圖形表格表示和它們之間的連接,還可以生成sql腳本來創建它們。

enter image description here

+0

謝謝@broadband我設法通過稍微修改查詢來選擇b.id,b.title,b.author,b。isbn, c.cat_name FROM book AS b INNER JOIN category AS c ON b.category = c.id – 2014-12-04 15:09:09

0

請先刪除再經過書,類別表 之間的父子關係,你可以改變你的表

要刪除關係到預訂表結構 那麼之後你會去書表的關係,然後刪除指數類領域