【问题标题】:Combining Fields In MySQL Query在 MySQL 查询中组合字段
【发布时间】:2011-06-28 16:40:36
【问题描述】:

我有三个 InnoDB mysql 表。一个有一个书籍列表,其中包含 book_id、名称和项目链接的字段。另一个是作者表,包括 author_id、名字和姓氏,最后一个表是要作者的书籍索引。有些作品有不止一位作者。

我正在尝试编写一个查询来提取所有书籍,并在作者字段中显示给定标题的所有作者。例如,如果我想要一个图书列表,查询将返回图书 ID、图书名称、我可以下载图书的链接以及图书所有作者的姓名。假设有 2 位或更多作者,我怎样才能将所有作者姓名放入一个字段中?

这是我目前所拥有的:

SELECT b.book_id, book_title, link_src, CONCAT(a.firstname, ' ',a.lastname) AS author from books AS b
JOIN author_to_books AS atb ON b.book_id = atb.book_id
JOIN authors AS a ON atb.author_id = a.author_id

这为同一本书提供了两个单独的行。例如,如果测试书 1 有 Joe Public 和 John Smith 作为作者,我会得到两行相同的书 ID。我只想在作者字段中包含两位作者的一行。

非常感谢任何帮助。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    为此,您需要GROUP_CONCAT

    快速示例:

    SELECT b.book_id, book_title, link_src, 
     GROUP_CONCAT(CONCAT(a.firstname, ' ',a.lastname)) AS author 
    FROM books AS b
    JOIN author_to_books AS atb ON b.book_id = atb.book_id
    JOIN authors AS a ON atb.author_id = a.author_id
    GROUP BY book_id
    

    但通常您最好在应用程序代码中执行此操作(此后,您还需要将“作者”设为可点击链接等)。

    【讨论】:

      【解决方案2】:

      参见GROUP_CONCAT() 函数。

      SELECT b.book_id, b.book_title, b.link_src, 
        GROUP_CONCAT( CONCAT(a.firstname, ' ',a.lastname) ) AS authors 
      FROM books AS b
      JOIN author_to_books AS atb ON b.book_id = atb.book_id
      JOIN authors AS a ON atb.author_id = a.author_id
      GROUP BY b.book_id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 2016-07-27
        相关资源
        最近更新 更多