Состояние в группе функция concat()
Ребята у меня в БД есть следующие таблицы
Локации
- id (первичный ключ)
- имя
Проекты
- id (первичный ключ)
- location_id (внешний ключ = > locations)
- имя проекта
Вехи
- id (первичный ключ)
- имя
Статусы
- id (основной ключ)
- статус
Project_milestones
- id (первичный ключ)
- project_id (внешний ключ = > проекты)
- milestone_id (внешний ключ => контрольные точки)
- status_id (внешний ключ = > statuses)
Здесь для перечисления всех вех (которые имеют статус 9) всех проектов я использую следующий запрос
SELECT projects.projectname, locations.name, DATE_FORMAT(projects.created_at, '%d-%m-%y') as projectdate,
GROUP_CONCAT(milestones.name ORDER BY project_milestones.milestone_id ASC separator '<br/>') AS milestones
FROM projects INNER JOIN locations ON projects.location_id=locations.id
INNER JOIN project_milestones ON project_milestones.project_id=projects.id AND project_milestones.status_id=9
INNER JOIN milestones ON project_milestones.milestone_id=milestones.id
INNER JOIN statuses ON project_milestones.status_id=statuses.id
AND project_milestones.milestone_id=milestones.id GROUP BY projects.projectname
Результат выглядит так
Location Date Created Project Name Milestones (Status 9) Bangalore 25-10-11 ABCD CSO Contacts, Developer Bangalore 11-11-11 Friday Establish, Publish list Bangalore 08-11-11 XX CSO Contacts, Assemble,Layouts
Он отлично работает, но мне нужна еще одна колонка GROUP_CONCAT скажите вехи (статус 10) , чтобы отобразить все вехи (которые имеют статус 10) всех проектов.
Выводите как все проекты с перечисленными [Status-9 Milestones] и [Status-10 milestones]. Как я могу это сделать?
1 ответ:
SELECT *, ( SELECT GROUP_CONCAT(m.name ORDER BY m.id) FROM project_milestones pm JOIN milestones m ON m.id = pm.milestone_id WHERE pm.project_id = p.id AND pm.status_id = 9 ) milestone_9, ( SELECT GROUP_CONCAT(m.name ORDER BY m.id) FROM project_milestones pm JOIN milestones m ON m.id = pm.milestone_id WHERE pm.project_id = p.id AND pm.status_id = 10 ) milestone_10 FROM projects p JOIN locations l ON l.id = p.location_id