我有一个与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 | “团队签到” |空值| ''
我需要做的是将每个项目的所有与项目相关的详细信息放入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中提取数据,但是键值对却让我很头疼。任何帮助,将不胜感激!
最佳答案
不确定这是否是您想要的
选择
标题,
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一个
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
a.active = 1