我必须将表称为 books
和 authors
.
这是我的 books
表:
它包含书名、作者姓名和书的描述。
这是我的 authors
表:
它包含作者姓名、作者居住城市和作者肖像(描述)。
我的问题是:我怎样才能SELECT *
来自 books
的行作者城市所在的地方,例如Berlin
在authors
表。
在这种情况下,当 city=Berlin 时,带有 title = "Something title AAA"
的行和 title = "Something title DDD"
应该被选中。
这是我试过的:
$stmt = $pdo->prepare('SELECT title, author, description FROM books JOIN authors ON :city = city');
$stmt->execute(array(':city' => "Berlin"));
但它不起作用。我没有输出。我做错了什么?
最佳答案
您需要以下查询的结果:
SELECT books.* FROM books INNER JOIN authors ON books.author = authors.name
WHERE authors.city = 'Berlin'
对于 PHP/PDO,它看起来像下面这样:
$stmt = $pdo->prepare('SELECT books.* FROM books INNER JOIN authors ON books.author = authors.name WHERE authors.city = :city');
$stmt->execute(array(':city' => "Berlin"));
查询的 ON
部分定义了表 books
和 authors
之间的关系。加入后,您可以将这两个表想象成一个包含所有列的大表。在查询的 WHERE
部分,您定义过滤器以获取作者来自指定 :city
的所有 books
(在您的示例柏林).
关于php - MySQL:如何根据另一个表中的可用性进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429113/