我在使用 PHP 和 Mysql 以我想要的方式显示数据库记录时遇到问题。
我有3张 table ,BOOKS
, AUTHORS
, BOOKS_AUTHORS
.
BOOKS
表具有以下列,book_id
, title
, publish_date
, thumbnail
。 AUTHORS
表具有以下列,author_id
, first_name
, last_name
。 BOOKS_AUTHORS
表具有以下列,books_authors_id
, book_id
(链接到 book_id
表中的 BOOKS
),以及 author_id
(链接到 author_id
表中的 AUTHORS
)。
这是我用来显示结果的 SQL。
SELECT books.book_id, title, publish_date, thumbnail, authors.author_id, first_name, last_name, books_authors.book_id, books_authors.author_id
FROM books, authors, books_authors
WHERE books.book_id = books_authors.book_id
AND authors.author_id = books_authors.author_id
AND books.book_id = (INSERT NUMBER HERE)
除非一本书有超过 1 位作者,否则一切正常。假设一本书有 2 位作者。我将返回 2 条具有相同标题、发布日期和缩略图的记录,但每条记录都有不同的作者姓名。所以现在我有 2 个重复的标题、2 个重复的publish_dates 和 2 个重复的标题。 这不是我想要显示记录的方式。 我希望两个作者姓名都显示在 1 个标题、1 个发布日期和 1 个缩略图下。
最佳答案
尝试按您不想重复的字段进行分组,然后对作者信息使用 GROUP_CONCAT 将每个作者列在同一行中:
SELECT books.book_id, title, publish_date, thumbnail,
GROUP_CONCAT(CONCAT(authors.author_id,' ', first_name,' ', last_name))
FROM books, authors, books_authors
WHERE books.book_id = books_authors.book_id
AND authors.author_id = books_authors.author_id
AND books.book_id = (INSERT NUMBER HERE)
GROUP BY books.book_id, title, publish_date, thumbnail
我还会使用内部联接,而不是先列出表,然后再使用 where 子句。这通常更容易阅读。所以中间部分是:
FROM books
INNER JOIN books_authors ON books.book_id = books_authors.book_id
INNER JOIN authors ON authors.author_id = books_authors.author_id
WHERE books.book_id = (INSERT NUMBER HERE)
关于php - 如何使用链接表正确显示记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619208/