【发布时间】:2014-05-22 00:25:23
【问题描述】:
我有一个类似于下面的架构,我正在尝试进行查询以从单个项目中获取所有过滤器和所有 project_items,以便使用 GROUP_CONCAT 将结果放在一行中。
过滤器
- 身份证
- 标题
project_filters
- 身份证
- filters_id
- projects_id
项目
- 身份证
- 标题
project_items
- 身份证
- 标题
- projects_id
表是这样连接的
[过滤器] 1--N [project_filters] N--1 [项目] 1--N [project_items]
查询和问题
- 选择
- projects.id,
- projects.title,
- GROUP_CONCAT(project_items.title) AS items_title,
- GROUP_CONCAT(filters.title) AS filters_title
- 来自项目
- LEFT JOIN project_items ON project_items.projects_id=projects.id
- LEFT JOIN project_filters ON projects.id=project_filters.projects_id
- LEFT JOIN 过滤器 ON filters.id=project_filters.filters_id
- WHERE projects.id="1"
项目 1 有 3 个过滤器(1、2 和 3)和 3 个项目(1、2 和 3),这会导致重复值(每个 9),如下所示:
- id = 1
- 标题 = 项目 1
- items_title = 标题 1、标题 2、标题 3、标题 1、标题 2、标题 3、标题 1、标题 2、标题 3
- filters_title = 过滤器 1、过滤器 2、过滤器 3、过滤器 1、过滤器 2、过滤器 3、过滤器 1、过滤器 2、过滤器 3
谁能指出我正确的方向?我想知道如何使查询返回过滤器和项目而不重复。
我认为解决方案是以某种方式安排连接,但我想不通。
OBS:带有 DISTINCT 的 GROUP_CONCAT 不适合,因为可能有重复的标题
非常感谢!
【问题讨论】:
标签: mysql sql join distinct group-concat