2

テーブルに次のデータがあります。

テーブルブック
ID | Book_Name
1 | Java プログラミング
2 | PHP プログラミング
3 | HTML5

表の章
ブック ID | Chapter_Number
1 | 第1章
1 | チャプター1v2
1 | チャプター1v3
2 | 第 2 章 リリース 1
2 | 第 2 章 Rev.
3 | 第1章
4 | 第1章

私が達成したかったのは、各本の章から返される章番号データを 2 行に制限することです。

欲しいデータ例

ブック ID | 書籍名 | Chapter_Number
1 | Java プログラミング | 第1章
1 | Java プログラミング | チャプター1v2
2 | Java プログラミング | 第 2 章 リリース 1
2 | Java プログラミング | 第 2 章 Rev.
3 | Java プログラミング | 第1章
4 | Java プログラミング | 第1章

これを取得する方法はありますか?

4

2 に答える 2

4

rankこれを行う 1 つの方法は、列を導入することです。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 に答える