在 MySQL 查询中组合字段
Posted
技术标签:
【中文标题】在 MySQL 查询中组合字段【英文标题】:Combining Fields In MySQL Query 【发布时间】: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。我只想在作者字段中包含两位作者的一行。
非常感谢任何帮助。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于在 MySQL 查询中组合字段的主要内容,如果未能解决你的问题,请参考以下文章