php - MySQL 选择行值作为键=>值

标签 php mysql sql optimization

我在 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/

相关文章:

php - 如何测试拒绝 Amazon Payments 授权?

php - 以表格形式显示此内容的最佳方式?

php - 如何操作php时间数据并在:minute format小时内获得结果

mysql - 如何允许用户更轻松地在用户计算机上安装 MySQL,以便他们可以通过 Java 应用程序连接到它?

php - 删除 MySQL 中超过 30 分钟的行

php - 复杂的连接查询

MySQL 查询每次显示的结果不一致

php - 如何防止PHP中的SQL注入(inject)?

mysql - sql查询没有正确执行(where)

sql - SQL Server 中数组数据类型的任何替代方案