У меня есть этот запрос 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
Это работает корректно, но только когда я жестко ввожу в запрос идентификатор, который мне нужен (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
И я получаю ошибку:
Неизвестный столбец 'm.id' в 'где
пункт '
Почему?
Из руководства MySql:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
Итак ... это не работает, когда подзапрос находится в разделе SELECT? Я ничего не читал об этом.
Кто-нибудь знает? Что я должен делать? Создание этого запроса заняло у меня много времени ... Я знаю, что это запрос монстра, но он получает то, что я хочу, в одном запросе, и я так близок к тому, чтобы заставить его работать!
Может кто-нибудь помочь?