我有三个InnoDB mysql表。其中一个包含书籍列表,其中包含book_id,name和项目链接的字段。另一个是作者表,包括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
这给了我同一本书的两个单独的行。例如,如果Test Book 1有Joe Public和John Smith作为作者,我会为同一本书ID获得两行。我想在作者字段中与两位作者只有一行。
非常感谢任何帮助。
答案 0 :(得分:0)
您需要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
但通常你会更好地在你的应用程序代码中这样做(因为之后,你会想要让'作者'也成为一个可点击的链接,等等。)
答案 1 :(得分:0)
请参阅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