我在 Basecamp 中设置了与此类似的 MySQL 结构:
bc_projects
project_id | title | active
2618731 | 'Sample Title' | 1
2618732 | 'Sample Title 2' | 0
bc_todolists
todolist_id | project_id | title
6731098 | 2618731 | 'Launch Status'
6731099 | 2618731 | 'Some Other List'
bc_todos
todo_id | todolist_id | title | completed | content
39180738 | 6731098 | 'Client Signoff' | 1366041432 | 'YYYY-MM-DD'
39180739 | 6731098 | 'Team Signoff' | 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 中提取数据,但键值对让我头脑困惑。任何帮助将不胜感激!
最佳答案
不确定这是否是你想要的
选择 a.标题,
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
来自 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
关于php - MySQL 选择行值作为键=>值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256331/