亲爱的 friend 们大家好!我要感谢大家对像我这样的菜鸟如此热心的帮助和理解。这是我的第二个问题,请怜悯。
我想连接 2 个表(AUTHORS 和 BOOKS),以便表 2 中的 AUTHOR_REF 将成为表 1 中作者的完整姓名(而不是 AUTHOR_REF)。 (authors.id和books.author_ref之间存在外键约束关系
这 2 个表是:
**ID LAST NAME FIRST NAME**
1 Palahniuk Chuck
2 Faulkner William
3 Beckett Samuel
**ID TITLE AUTHOR_REF**
1 Fight Club 1
2 Absalom, Absalom!! 2
3 Choke 1
4 Waiting for Godot 3
案例/问题: 用户在网站上搜索某本书。我使用准备好的语句来准备查询:
$stmt = mysqli_prepare($db, "SELECT title, autor_ref FROM books WHERE title LIKE CONCAT('%', ?, '%')" );
我知道我应该使用一些带有类似于“authors.last_name=books.author_ref”的 WHERE 条件的 JOIN,但我已经从第一个 SELECT 中获得了 WHERE 条件。我怎样才能实现我的目标?
我真的很困惑。我的数据库设计得很糟糕吗?
如有任何帮助,我们将不胜感激。 问候
最佳答案
不,您实际上走在正确的轨道上,并且您的数据库设计正确。 JOIN
将有自己的 ON
条件,该条件不属于 WHERE
子句:
SELECT
title,
`FIRST NAME`,
`LAST NAME`
FROM
books
/* Join brings over the author name */
JOIN authors ON books.AUTHOR_REF = authors.ID
/* WHERE clause does not change */
WHERE title LIKE CONCAT('%', ?, '%')
如果您有任何书籍没有已知作者 (AUTHOR_REF IS NULL
),请使用 LEFT JOIN
代替,以便书名仍返回,作者姓名为 NULL
。
SELECT
title,
`FIRST NAME`,
`LAST NAME`
FROM
books
/* Left join ensures a row returned for the book even if it has no author */
LEFT JOIN authors ON books.AUTHOR_REF = authors.ID
WHERE title LIKE CONCAT('%', ?, '%')
关于php - 连接 2 个表的查询(使用 LIKE 和准备好的语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171930/