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