2011-07-27 15 views
1

私は1つはなど、テキストを保つためである、二つのテーブルのこの種を持っている、もう一つは1つのテーブルのみを左結合する方法はありますか?

pages table

pg_id  pg_content parent_id 
10  xxx   3   
11  xxx   3 
12  xxx   3 

image table、画像情報を保持するために

img_id pg_id img_order  cat_id 
1   10  1    1 
2   10  1    2 
3   10  2    2 
4   11  1    1 

だから私ですimg_order 1イメージのすべてのページをcat_idから1つだけリストしたいのですが、ページにイメージがある場合は複写された行が得られますcat_id 2、

SELECT* 
FROM root_pages 

LEFT JOIN root_images_pages 
ON root_images_pages.pg_id = root_pages.pg_id 

WHERE root_pages.parent_id = '3' 
AND root_pages.pg_id != '3' 
AND (root_images_pages.img_order = '1' OR root_images_pages.img_id is NULL) 

ORDER BY root_pages.pg_created DESC 
LIMIT 12 

どうすれば修正できますか?私はあるしたくなる

pg_id  pg_content parent_id  img_id pg_id img_order  cat_id  
    10  xxx   3   1   10  1    1   
    11  xxx   3   4   11  1    1 
    12  xxx   3   null  null null   null 

EDIT:

私はそういないイメージを持つページが表示されないことができ、クエリに以下の行を追加する必要があり、

AND (i.img_order = '1' OR i.img_id is NULL) 

だからここには、

SELECT* 
FROM root_pages p 

LEFT JOIN root_images_pages i 
ON i.pg_id = p.pg_id and i.cat_id = 1 

WHERE p.parent_id = '3' 
AND p.pg_id != '3' 
AND p.pg_hide != '1' 
AND (i.img_order = '1' OR i.img_id is NULL) 

ORDER BY p.pg_created DESC 
LIMIT 12 

答えて

1

を残しましたfor:

SELECT* 
FROM root_pages r 

LEFT JOIN root_images_pages i 
ON i.pg_id = r.pg_id and i.cat_id = 1 

WHERE r.parent_id = '3' 

ORDER BY r.pg_created DESC 
LIMIT 12 

あなたの編集を見た後、私はあなたがJOIN条件を切り替える必要があると思う。

LEFT JOIN root_images_pages i 
ON r.pg_id = i.pg_id and i.cat_id = 1 
+0

ありがとうございました!それは私が探している答えに近いです!私の編集で見てください。ありがとう。 – laukok

2

where句でcat_id = 2を除外しますか?

WHERE .... AND (root_images_pages.cat_id <> 2) 

または明示的に許可するcat_id = 1?

WHERE .... AND (root_images_pages.cat_id = 1) 
+0

私は 'pg_id = 10'の' cat_id = 1'で2つ以上のイメージを持っていると複製します。 – laukok

0

私はマークが正しい答えを持っていると信じています。しかし、私はあなたが必要と思わない:

OR root_images_pages.img_id is NULL 

img_idは主キーですと仮定します。

1

は、ページを選択するために、サブクエリを使用してみてください、その後、このことについて、私はあなたの参加にCAT_ID基準を追加することによって、あなたが探しているデータを取得することをどう思うか、あなたのルートイメージを参加

 
SELECT 
    * 
FROM 
    (SELECT 
     * 
    FROM 
     root_images_pages 
    WHERE 
     cat_id = 1 
    ) AS i 
    LEFT JOIN root_pages AS p 
    ON i.pg_id = p.pg_id 
+0

画像がないページがあると問題が発生します。 – laukok

関連する問題