0

我有两个表:post、post_image

我目前正在尝试像这样加入他们:

$sql = 'SELECT post.*, post_image.name AS img FROM post, post_image 
WHERE post_image.postId=post.id LIMIT 10';

这是我的问题。有些帖子在 post_image 中没有任何条目,但我仍然需要返回它们。我知道 mysql 可以检查 null,但如果这是解决方案,我不确定它会在我的声明中去哪里。我也不完全确定我可以使用我正在使用的速记连接来做到这一点。

请帮忙 :)

编辑:

这现在按预期工作,但我还需要确保它只提取字段 ordinal=0 的 post_image,因为可以有多个 post_image 条目。我尝试添加一个 WHERE 子句,它似乎只提取带有图像的帖子。这就是我所拥有的:

SELECT post.*, post_image.name AS img FROM post LEFT JOIN post_image ON post_image.postId=post.id WHERE post_image.ordinal=0 LIMIT 10
4

2 回答 2

5

像这样使用LEFT JOIN

SELECT 
  post.*, 
  post_image.name AS img 
FROM post
LEFT JOIN post_image ON post_image.postId = post.id 
LIMIT 10;

您的查询是INNER JOIN使用旧连接语法的两个表,它使用WHERE子句来指定连接条件。最好在以后的查询中JOIN使用使用条件的显式语法。INNER JOIN

了解更多信息:

于 2013-02-26T06:20:50.240 回答
1

怎么用LEFT JOIN?我认为它会显示帖子,尽管它没有图像。

SELECT * FROM post p LEFT JOIN post_image pi ON p.id = pi.postId
于 2013-02-26T06:23:31.377 回答