php - 如何使用链接表正确显示记录

标签 php mysql sql

我在使用 PHP 和 Mysql 以我想要的方式显示数据库记录时遇到问题。

我有3张 table ,BOOKS , AUTHORS , BOOKS_AUTHORS .

BOOKS表具有以下列,book_id , title , publish_date , thumbnailAUTHORS表具有以下列,author_id , first_name , last_nameBOOKS_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/

相关文章:

PHP数组根据两个键查找值

php - 这段代码容易受到黑客攻击吗?

mysql - 如何将所有权限恢复到 MySQL 中的 root 用户?

sql - 这是编写 SQL 查询的低效方法吗?

mysql - 是否可以只用一个 SELECT 随机排序 "first n"条记录?

php - 在单行中按名称对列组的值进行计数

php - 根据用户投票移动 div

php - 在 MySQL PHP 中提取特定数据并限制其限制

php - ajax 弹出窗口上的提交按钮不起作用

mysql - mysql中插入和检索操作的执行时间