我有一个与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

07-28 07:37