gpt4 book ai didi

php - 具有 3 个 INNER JOIN 的 MYSQL 查询

转载 作者:行者123 更新时间:2023-11-29 00:10:07 25 4
gpt4 key购买 nike

Here's an img with 3 JOINs Here's an img with only 1 JOIN我正在尝试创建一个图书目录。我有 3 个基本表 - books、authors、books_authors;

书籍

+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| book_id | int(11) | NO | PRI | NULL | auto_increment |
| book_title | varchar(250) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+

作者

+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| author_id | int(11) | NO | PRI | NULL | auto_increment |
| author_name | varchar(250) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+

图书作者

+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| book_id | int(11) | NO | MUL | NULL | |
| author_id | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+-------+

我有一个查询,它获取每本书的书名和所有作者并显示结果:

$booksAndAuthors = mysqli_query($connection, 'SELECT * FROM books LEFT JOIN books_authors ON books.book_id=books_authors.book_id LEFT JOIN authors ON authors.author_id=books_authors.author_id');

它返回:

Book Name -> Author 1, Author 2
Book Name 2 -> Author 3, Author 2

等等。

我还有一个问题是:

$booksAndAuthors = mysqli_query($connection, 'SELECT * FROM books_authors as ba 
INNER JOIN books as b ON ba.book_id=b.book_id
INNER JOIN books_authors as booaut ON booaut.book_id=ba.book_id
INNER JOIN authors as a ON booaut.author_id=a.author_id
WHERE ba.author_id=' . $author_id);

当我点击一个作者(作者是链接)时,查询返回相反作者的所有书籍;查询都有效;

我的问题是:

有人可以向我解释为什么我要将表格与自身进行比较。只是为像我这样的傻瓜解释一下。我想通过文字或其他方式了解此查询完成的操作。

*如果我的问题没有被正确地问到!编辑我!*问候!

最佳答案

一本书可以有多个作者。自连接的目的是找到该书的其他作者。

FROM books_authors as ba 
...
INNER JOIN books_authors as booaut ON booaut.book_id=ba.book_id
...
WHERE ba.author_id=42

连接选取与作者 42 合着一本书的任何作者。

另一种写查询的方法:

FROM books_authors as ba 
...
WHERE EXISTS
(
SELECT *
FROM books_authors ba2
WHERE ba2.book_id = ba.book_id
and ba2.author_id = 42
)

也就是说,选择作者 42 存在匹配的 book_authors 条目的所有行。

关于php - 具有 3 个 INNER JOIN 的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com