私はこのMysqlクエリを持っています、それは動作します:
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = 37)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = 37)
) aSq
) areas
FROM m3allems m
WHERE m.id = 37
結果は次のとおりです。
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
これは正しく機能しますが、必要なIDをクエリにハードコーディングした場合に限ります(37)。m3allemテーブルのすべてのエントリで機能するようにしたいので、これを試してみます。
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = m.id)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = m.id)
) aSq
) areas
FROM m3allems m
そして、私はエラーを受け取ります:
'where句'の不明な列'm.id'
なんで?MySqlマニュアルから:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
それで...サブクエリがSELECTセクションにある場合、これは機能しませんか?私はそれについて何も読んでいませんでした。
誰か知っている?私は何をすべきか?このクエリを作成するのに長い時間がかかりました...これはモンスタークエリであることはわかっていますが、1つのクエリで必要なものを取得でき、動作するようになりました。
誰か助けてもらえますか?