我的表格中有以下数据。
Table Books Id | Book_Name 1 | Java Programming 2 | PHP Programming 3 | HTML5 Table Chapters Book Id | Chapter_Number 1 | Chapter 1 1 | Chapter 1v2 1 | Chapter 1v3 2 | Chapter 2 Release 1 2 | Chapter 2 Rev. 3 | Chapter 1 4 | Chapter 1
我想要实现的是将章节数量从每个书籍章节的回报限制为仅2行。
我想要的数据示例
Book Id | Book Name | Chapter_Number 1 | Java Programming | Chapter 1 1 | Java Programming | Chapter 1v2 2 | Java Programming | Chapter 2 Release 1 2 | Java Programming | Chapter 2 Rev. 3 | Java Programming | Chapter 1 4 | Java Programming | Chapter 1
有办法解决这个问题吗?
答案 0 :(得分: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
答案 1 :(得分: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的答案。