关系数据库和自动递增

时间:2014-01-12 16:29:49

标签: mysql database

你好我正在尝试为我正在创建的书评系统链接两个数据库

例如我有一个书籍表,我还有另一个流派表。

书籍表将存储所有不同的书籍,并且将使用genre_id键或其他内容具有其所属类型的外键。

当我对类型进行查询时,我希望它能够显示该类型的书籍数量,例如幻想类型中的2本书。

为此我需要一个记录栏?但是,当添加或删除新记录时,如何自动递增/删除?

编辑:

哇谢谢你们所有的帮助,所以我知道我不需要一个单独的记录表,但是我想要它可以用这个

function all_get() { 
    $this->load->database(); 
    $sql = 'SELECT * FROM books;'; 
    $query = $this->db->query($sql); 
    $data = $query->result();
    $this->response($data, 200); 
}

我如何查询以显示每个类型的记录,而不是单独显示所有单独的书籍?

2 个答案:

答案 0 :(得分:0)

您不需要记录列。您可以查询与每种类型相关的书籍数量:

SELECT count(*) FROM Book WHERE genre_id = :genreId;
在你开始之前BTW可能会重新考虑你的实体关系。是Genre< - >预订真的1:n?

答案 1 :(得分:0)

编辑:我可能误解了,最初我认为这些是两个单独的问题 - 一个是关于创建一个自动递增的主键,另一个是关于如何显示每个类型的书籍数量。

计数

在显示每种类型的书籍数量以及该类型的名称时,我认为你正在寻找这样的东西:

SELECT g.genreName, count(*) from books b
JOIN genres g on g.ID = b.genreID
GROUP BY g.genreName

SQL小提琴:http://sqlfiddle.com/#!2/a3c45e/2

自动递增

正如其他人已经评论过的那样,您不需要单独的记录表,但是如果您仍然需要自动递增主键的帮助,这里是W3 schools中最基本的示例:

CREATE TABLE Persons
(
 ID int NOT NULL AUTO_INCREMENT,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255),
 Address varchar(255),
 City varchar(255),
 PRIMARY KEY (ID)
)