使用连接在MySQL查询中苦苦挣扎

我有3个表来存储有关书籍的信息:
books
-----
id
title

authors
-------
id
name

books_to_authors
----------------
book_id
author_id
当显示书籍的信息时,我希望能够选择同一作者的任何其他书籍。 我从第一个查询中获得了当前的书籍ID,但我无法弄清楚从哪里开始实现我需要的,因为可能有多个作者。显然只有其中一个就很简单,所以我真的很挣扎。任何帮助将非常感激!     
已邀请:
我认为这要做到这一点。只需将
?
替换为他们当前正在查看的图书ID,这将为您提供同一作者的所有图书。
SELECT b.*
FROM books b
INNER JOIN books_to_authors b2a ON b2a.book_id = b.id
WHERE b2a.author_id IN (
  SELECT author_id FROM books_to_authors WHERE book_id = ?
)
如果要排除当前正在查看的图书,可以像这样更改查询:
SELECT b.*
FROM books b
INNER JOIN books_to_authors b2a ON b2a.book_id = b.id
WHERE b2a.author_id IN (
  SELECT author_id FROM books_to_authors WHERE book_id = ?
)
AND b.id <> ?
    
$book_id = (your code for retrieving book_id);    

$db_query = "SELECT b.*
FROM books b
INNER JOIN books_to_authors bta ON bta.book_id = b.id
WHERE bta.author_id IN (
  SELECT author_id FROM books_to_authors WHERE book_id = ".$book_id."
)";
我推测你使用的是php。如果我错了,只需使用SQL查询字符串,然后忽略其余的...     
您正在寻找下面的查询。我看到一些子查询的解决方案,我强烈建议不要使用子查询。它们比运行2个查询慢: 拥有书籍ID你做
SELECT author_id FROM books_to_authors WHERE book_id = '{$book_id}'
获取作者ID,然后运行:
SELECT books.id, books.title, authors.name FROM books RIGHT JOIN books_to_authors ON books_to_authors.book_id = books.id) RIGHT JOIN authors ON (authors.id = books_to_authors.author_id) WHERE authors.id = '{$author_id}'
    

要回复问题请先登录注册