0

私は2つのテーブルを持っています: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 をチェックできることは知っていますが、それが解決策である場合、ステートメントのどこに行くのかわかりません。また、使用している短縮形の結合でこれを実行できるかどうかも完全にはわかりません。

助けてください :)

編集:

これは現在期待どおりに機能していますが、複数の post_image エントリが存在する可能性があるため、フィールド ordinal=0 の 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

Use LEFT JOIN like this:

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

Your query is INNER JOIN the two tables using the old join syntax which uses the WHERE clause to specify the join condition. Better off use the explicit JOIN syntax using the INNER JOIN condition instead in future queries.

For more information:

于 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 に答える