2

我的表中有以下数据。

桌书
身份证 | 书名
1 | Java 编程
2 | PHP 编程
3 | HTML5

表章节
图书编号 | Chapter_Number
1 | 第1章
1 | 第 1v2 章
1 | 第1v3章
2 | 第 2 章第 1 版
2 | 第 2 章修订。
3 | 第1章
4 | 第1章

我想要实现的是将每本书章节的章节编号数据返回限制为 2 行。

我想要的数据示例

图书编号 | 书名 | Chapter_Number
1 | Java 编程 | 第1章
1 | Java 编程 | 第 1v2 章
2 | Java 编程 | 第 2 章第 1 版
2 | Java 编程 | 第 2 章修订。
3 | Java 编程 | 第1章
4 | Java 编程 | 第1章

有没有办法得到这个?

4

2 回答 2

4

一种方法是引入一个rank列。您可以使用以下方法执行此mysql操作user-defined variables

select *
from (
  select b.id, 
         b.book_name, 
         c.chapter_number,
         @rnk:=IF(@prevbookid=b.id,@rnk+1,1) rnk,
         @prevbookid:=b.id
  from books b
    join chapters c on b.id = c.bookid
    join (select @rnk:= 0, @prevbookid:= 0) t
  order by b.id, c.chapter_number
  ) t
where rnk <= 2
于 2013-09-25T00:49:57.693 回答
0

我不确定您如何仅使用 SQL 来做到这一点。您可以借助如下代码在 SQL 中执行此操作:

首先,获取章节 ID 列表:

select distinct id from Chapter;

然后,您必须(在代码中)遍历每个 id,运行如下查询:

select * from Chapter join Book on Book.id = Chapter.Book_id where Chapter.Book_id=(the iterated id) limit 2;

显然,这不是很可扩展,因为您必须为列表中的每个 id 运行查询。这是个好问题。我会投票赞成。也许有人可以提供仅 SQL 的答案。

于 2013-09-25T00:52:33.897 回答