我正在为个人发展创建一个图书馆应用程序,并希望进一步了解 MySql。
我目前有两个表 'book' 和 'category'
书
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
我正在做一个简单的搜索,我想在其中显示所有书籍(从书中选择 *),并且我想显示所有书籍及其相应的类别。这有效,但显示类别编号而不是类别名称。
例如
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>';
};
我一直在研究外键和索引,但我似乎无法理解它们。 我对此很陌生,所以非常感谢任何帮助。
最佳答案
通过sql join来显示所有对应类别的图书:
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 脚本来创建它们。
关于php - 基本连接表和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294830/