使用联接处理MySQL查询

使用联接处理MySQL查询,mysql,join,Mysql,Join,我有3个表格用于存储有关书籍的信息: books ----- id title authors ------- id name books_to_authors ---------------- book_id author_id 当显示一本书的信息时,我希望能够选择同一作者的任何其他书 在第一次查询中,我有当前的图书id,但是我不知道从哪里开始实现我所需要的,因为可能有多个作者。很明显,只要其中一个就很简单了,所以我真的很难做到这一点。任何帮助都将不胜感激 我认为这没什么好做的。换个新的

我有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 <> ?

我假设您正在使用php。如果我错了,只需使用SQL查询字符串,忽略其余的…

您正在查找下面的查询。我看到一些带有子查询的解决方案,我强烈建议不要使用子查询。它们比运行2个查询慢:

有了图书id,您可以从图书中选择作者id,其中图书id=“{$book\u id}” 获取作者id,然后运行以下操作:

选择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}”


除了一本给定的书可以有多个作者之外,这也不是问题,在第二个查询中,authors.id位于.infrade',',$authorsIdArray中。它完成了任务
$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."
)";