我在Basecamp中设置了与此类似的MySQL结构:
bc_projects
project_id |标题 | 活跃的2618731 | '样本标题'| 1
2618732 | '样本标题2'| 0
bc_todolists
todolist_id | project_id |标题
6731098 | 2618731 | '发布状态'
6731099 | 2618731 | '其他名单'
bc_todos
todo_id | todolist_id |标题 | 完成|内容
39180738 | 6731098 | '客户签收'| 1366041432 | 'YYYY-MM-DD'
39180739 | 6731098 | '团队签收'| null | ''
我需要做的是将每个项目的所有项目相关细节分为1行(或其他一些同样有效的SQL)
下一部分甚至是琐事。我想从 bc_todos 获取内容或完成内容,具体取决于内容是 null 还是= 'YYYY-MM-DD'。我试图自己运行这个,但我在这一点上陷入困境。以下是我到目前为止的情况:
SELECT
bc_projects.title
(SELECT GROUP_CONCAT(todolist_id SEPARATOR ',') FROM `bc_todolists` WHERE project_id = bc_projects.project_id) AS lists
FROM
bc_projects
WHERE
bc_projects.active = 1
我知道我现在可以使用查询中的联接列表从 bc_todos 中提取数据,但是键值配对让我头疼。任何帮助将不胜感激!
答案 0 :(得分:0)
不确定这是否是你想要的
选择 a.title,
GROUP_CONCAT(b.todolist_id SEPARATOR ',') AS lists,
CASE WHEN c.content IS NULL
THEN GROUP_CONCAT(c.completed SEPARATOR ',')
ELSE GROUP_CONCAT(c.content SEPARATOR ',')
END as outlist
FROM bc_projects a
LEFT OUTER JOIN `bc_todolists` b ON a.project_id = b.project_id
LEFT OUTER JOIN bc_todos c ON b.todolist_id = c. todolist_id
WHERE.active = 1