2

BOOK と REVISION の 2 つのテーブルがあります。

本
ブック ID | ブック名 |
======================
1 | ブック 1|
2 | ブック 2|
3 | ブック 3|
4 | ブック 4|
リビジョン
Rev_Book_ID | Date_Modified |
===========================
1 | 2012 年 10 月 1 日 |
2 | 2012 年 10 月 3 日 |
2 | 2012 年 10 月 5 日 |
4 | 2012 年 10 月 6 日 |

ブックが変更されると、ブックの book_id がリビジョン テーブルに保存されます。その本が再び改訂されている場合、その特定の本の別の行が追加されます。私のSQLクエリでは、結果はこれで、本の2つのリビジョンが表示されます。

これが私のクエリです:

SELECT book.Book_ID, book.Book_Name, Revision.Rev_Book_ID  from Book INNER JOIN Revision ON book.Book_ID=Revision.Rev_Book_ID

また、リビジョンの結果 (PHP の問題) では、本が 2 回改訂された場合に 2 つのリビジョンが表示されるか、3 つのリビジョンが作成された場合は 3 つ表示されるようにするにはどうすればよいでしょうか。それを作る。

私の結果:

ブック ID | 書籍名 | リビジョン |
==============================================
1 | ブック 1 | 1 リビジョン |
2 | ブック 2 | 2 リビジョン |
2 | ブック 2 | 2 リビジョン |
3 | ブック 3 | リビジョンなし |
4 | ブック 4 | 1 リビジョン |
結果が欲しい
ブック ID | 書籍名 | リビジョン |
==============================================
1 | ブック 1 | 1 リビジョン |
2 | ブック 2 | 2 リビジョン |
3 | ブック 3 | リビジョンなし |
4 | ブック 4 | 1 リビジョン |
4

3 に答える 3

0

重複を取り除きたいだけだと仮定します:

SELECT book.Book_ID, book.Book_Name, Revision.Rev_Book_ID from Book 
INNER JOIN Revision ON book.Book_ID=Revision.Rev_Book_ID GROUP BY book.Book_ID
于 2013-10-04T16:13:06.050 に答える
0

書籍ごとに、リビジョンの数 ( COUNT(Date_Modified)):

   SELECT Book_ID, Book_Name, COUNT(Date_Modified) AS "Revisions"
     FROM Book
LEFT JOIN Revison
       ON Book_ID = Revision_Book_ID
 GROUP BY 1, 2
于 2013-10-04T16:08:49.997 に答える
0

book_id でグループ化し、これらの rev_book_ids のみを選択することができます == to MAX(Rev_Book_ID) 一般に、本ごとにデータを集約します。ここにmysqlの仕様があります:http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html 多くのアイデアが得られるはずです

于 2013-10-04T16:08:05.100 に答える