php - MySQL:如何根据另一个表中的可用性进行选择

标签 php mysql sql join left-join

我必须将表称为 booksauthors .

这是我的 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"));

但它不起作用。我没有输出。我做错了什么?

最佳答案

您需要以下查询的结果:

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 部分定义了表 booksauthors 之间的关系。加入后,您可以将这两个表想象成一个包含所有列的大表。在查询的 WHERE 部分,您定义过滤器以获取作者来自指定 :city 的所有 books(在您的示例柏林).

关于php - MySQL:如何根据另一个表中的可用性进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429113/

相关文章:

php - 如何使用 PHP 将 Excel XLS 转换为 CSV

javascript - 如何检测Android浏览器而不是Android应用程序(WebView)?

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - phpmyadmin 显示 myisam 而不是 innodb

php - 嵌套查询和计算都在同一个查询中 - 这可能吗?

php - 使用 mySQL 显示 count(*) 结果的最快方法(最好在一行中)

php - 查询结果显示为“0”

php - php上线 fatal error : Call to a member function execute() on a non-object in/public_html/website/index.

mysql - 使用sql查询搜索中间字符串

php - 如何在codeigniter中更新数据库