2

たとえば、私のデータベースには3つのテーブルがあります。

  • 本に関するデータを保存するためのBooksテーブル
  • タグに関するデータを保存するためのタグテーブル
  • 複数のタグを持つ本に関する情報を格納するためのリンクテーブル(Book_Tagsテーブル)。

下の画像に示されています...(矢印の上の「M」は関係の多面性を意味します)

    BOOKS                    BOOK_TAGS                      TAGS
    +----+---------+         +---------+----------+         +----+---------------+
    |ID  |  Title  |         |Book_Id  |  Tags_Id |         |ID  |  Tag_Name     |
    +----+---------+         +---------+----------+         +----+---------------+ 
    |1   |  Book_1 | 1    M  |1        | 1        | M     1 |1   |  Tag_Name_1   |
    |1   |  Book_1 |<--------|1        | 2        |-------->|2   |  Tag_Name_2   |
    +----+---------+         |1        | 3        |         |3   |  Tag_Name_3   |
                             |2        | 1        |         +----+---------------+ 
                             |2        | 3        |         
                             +---------+----------+         

私の質問は、データベースにクエリを実行して、次のような結果が得られるようにする方法です。

    +---------------------------------------------------------+
    |ID  |  Book_Title  |   Tags                              |
    +---------------------------------------------------------+
    |1   |  Book_1      |   Tag_Name_1, Tag_Name_2, Tag_Name_3|
    |2   |  Book_2      |   Tag_Name_1, Tag_Name_3            |
    +---------------------------------------------------------+

そして、

    +----------------------------------+
    |ID  |  Book_Title  |   Tags       |
    +----------------------------------+
    |1   |  Book_1      |   Tag_Name_1 |
    |2   |  Book_1      |   Tag_Name_2 |
    |3   |  Book_1      |   Tag_Name_3 |
    |4   |  Book_2      |   Tag_Name_1 |
    |5   |  Book_2      |   Tag_Name_3 |
    +----------------------------------+
4

3 に答える 3

3

GROUP BY句を使用して、結果を集計し、文字列を追加できます。だから次のようなもの:

SELECT bk.Book_Title, GROUP_CONCAT(bt.Book_Id SEPARATOR ', ') FROM BOOK_TAGS bt
JOIN BOOKS bk ON bk.ID = bt.Book_Id
JOIN TAGS t ON t.ID = bt.Tags_Id
GROUP BY bt.Book_Id
于 2012-08-23T15:51:59.410 に答える
1
    SELECT b.book_title, tmp.tag_name from books b
    INNER JOIN (
SELECT bt.book_id as book_id , group_concat(t.tag_name) as tag_name FROM book_tags bt 
    INNER JOIN tags t ON t.tag_id =  bt.tags_id
) tmp
    ON tmp.book_id = b.id
于 2012-08-23T15:53:02.530 に答える
0

以下は、自動インクリメントIDを使用したSQLクエリです。

SELECT @temp:= @ temp + 1 AS ID、Book_Title、Tags FROM(SELECT title as Book_Title、GROUP_CONCAT(tag_name)AS Tags FROM(SELECT BOOKS.title、TAGS.tag_name FROM(book_tagsJOIN BOOKS ON BOOKS.id = BOOK_TAGS.book_id )TAGS.id = BOOK_TAGS.tag_idでタグを結合)tbl GROUP BY title)AS tbl CROSS JOIN(SELECT @temp:= 0)ASダミー

于 2015-10-24T10:34:26.217 に答える