2017-01-02 68 views
1

我不得不称为booksauthorsMySQL:如何根据可用性在另一个表中选择

这是我books表:

books table

它包含本书中,作者姓名和书中的描述的标题。

这是我authors表:

authors table

它包含了作者的名字,所在的城市生活的作家和作者肖像(介绍)。

我的问题是:我如何SELECT *books行作者城市建立为例如。 Berlinauthors表中。

在这种情况下,当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")); 

但它不工作。我没有输出。我究竟做错了什么?

+0

对于初学者来说,'ON:城市'就是事情开始的地方*“去南部”*。你不能以这种方式绑定它,因为PDO不知道提前做什么。 http://php.net/manual/en/pdo.error-handling.php会引发你一些关于它的事情。 –

+0

提示:JOIN条件在作者身上,不在城市。 –

+0

那么,我该怎么办? – user7128548

回答

2

您希望下面的查询结果:

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

+0

谢谢,这解决了我的问题! – user7128548

相关问题