0
SELECT pc. * , ssc. * , IF( ssc.category_id = pc.ID, '1', '0' ) AS checked
FROM property_categories pc
LEFT JOIN su_selected_categories ssc ON ssc.su_property_settings_id = 9

すべてのカテゴリを検索する選択クエリを実行しようとしています。次に、カテゴリの 1 つが他のテーブル内にあるかどうかを確認します。それが「チェック済み」としてマークされている場合

この例で残す必要があるのは 3 行 (3 つのカテゴリがあります) で、そのうち 2 行はチェックされた列内に「1」として、残りは「0」として含まれている必要があります。

このクエリは重複した行を返します。pc.ID でグループ化しようとすると、正しい行の 1 つが失われます。

どこが間違っていますか?

 ----------------------
 | id | category_name |
 ----------------------
 | 1  | category1     |
 ----------------------
 | 2  | category2     |
 ----------------------
 | 3  | category3     |
 ----------------------


 ---------------------------------------------
 | id | su_property_settings_id | category_id |
 ---------------------------------------------
 | 1  |                      1  |           2 |
 ----------------------------------------------
 | 2  |                      9  |           2 |
 ----------------------------------------------
 | 3  |                      9  |           1 |
 ----------------------------------------------
 ...more

更新しました*

group by pc.ID で得られるもの

ID | category_name | ID | su_property_settings_id | category_id | checked
--------------------------------------------------------------------------  
1  |    cat1       | 11 |                       9 |           2 |       0 
2  |    cat2       | 11 |                       9 |           2 |       1 
3  |    cat3       | 11 |                       9 |           2 |       0 

私が欲しいもの

ID | category_name | ID | su_property_settings_id | category_id | checked
--------------------------------------------------------------------------  
1  |    cat1       | 11 |                       9 |           2 |       1 
2  |    cat2       | 11 |                       9 |           2 |       1 
3  |    cat3       | 11 |                       9 |           2 |       0 
4

1 に答える 1

0

結合が間違った列にあるため、行が重複しています。の条件が含まれていませんcategory_id。以下は、重複の問題を修正する必要があります。

SELECT pc.*, ssc.*, (ssc.category_id is not null) AS checked
FROM property_categories pc LEFT JOIN
     su_selected_categories ssc
     ON ssc.su_property_settings_id = 9 and
        ssc.category_id = pc.ID;

まだ重複がある場合 (私には疑わしい)、おそらくcategory_id列の重複が原因です。

これは、とではなく、カテゴリがすべて選択されているかどうかに応じて、1またはを返します。これは、クエリの文字値とは異なることに注意してください。数値の方が適切だと思います。0'1''0'

文字値が必要な場合は、次のように変更SELECTします。

SELECT pc.*, ssc.*,
       (case when ssc.category_id is not null then '1' else '0' end) AS checked
于 2013-09-05T21:59:24.930 に答える