0

テーブルに保存された記事がありarticleます。一部の記事には、1 つ以上の写真が指定されたphotoテーブルに保存されていarticle_idます。一部の写真は「無効化」されており ( photo.active = '0')、取得できません。

ホームページの記事と、記事ごとに 1 枚以上の写真を含む 1 枚の写真を取得しようとしています。そのようです:

SELECT article.id, article.date, article.title, photo.filename_small 
FROM (article) 
LEFT JOIN photo ON photo.article_id=article.id 
WHERE photo.active = '1' 
GROUP BY article.id 
ORDER BY article.date desc 
LIMIT 10

(「グループ化」は、複数の写真を含む記事に対して複数の結果が得られないようにするためのものです。私にはぎこちなく思えます。)

そのWHERE photo.active = '1'ような場合、写真でしか結果が得られず、結合を左結合にする目的が無効になります。場所は、結合が写真付きの記事と一致する場合にのみ関連しますが、アクティブな写真のない記事はすべて除外されます。何か案は?

(はい、同様の質問がありますが、私はそれらの多くを読みましたが、まだ苦労しています。)

4

2 に答える 2

3

次のようなものを試してください

SELECT  article.id, 
        article.date, 
        article.title, 
        photo.filename_small  
FROM    (article)  LEFT JOIN 
        photo   ON  photo.article_id=article.id  
                AND photo.active = '1'  
GROUP BY article.id  
ORDER BY article.date desc  
LIMIT 10
于 2012-09-14T03:43:19.847 に答える
1

2 つのオプション。

  1. 結合句に入れます:

    LEFT OUTER JOIN photo ON photo.article_id=article.id AND photo.active = 1
    
  2. 再び明示的に null を許可します。

    WHERE (photo.active = 1 OR photo.id IS NULL)
    

2 つ目は、既に外部結合があるため、不必要に複雑に思えます。私は最初をお勧めします。

于 2012-09-14T03:46:29.807 に答える