php - 基本连接表和外键

标签 php mysql sql

我正在为个人发展创建一个图书馆应用程序,并希望进一步了解 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 脚本来创建它们。

enter image description here

关于php - 基本连接表和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294830/

相关文章:

sql - 我如何加入 msdb.dbo.sysoperators 和 msdb.dbo.sysalerts?

php - 使用 mysql codeigniter 图像更新 null

PHP - 每周显示 1 条随机记录

php - 网络服务器上的本地数据

php - 从mysql查询动态创建表

php - 使用 php 从 postgresql 检索数据并将值存储在变量中

mysql - 如何在 SQL 中的多个日期之间打印?

php - 用户生成/用户特定功能

php - Mysql比较值

c# - 如何发送电子邮件?