【问题标题】:What SQL query can I use to combine multiple rows from another table with first table? [closed]我可以使用什么 SQL 查询将另一个表中的多行与第一个表结合起来? [关闭]
【发布时间】:2021-02-25 16:19:15
【问题描述】:

我有一个包含体育课程的数据库表。一堂课可以有多种课程类型,如“热身”、“游戏”和“技术指导”。这些类型存储在另一个表中。我有第三张表,将类型与课程相匹配。

| lessonId | title       |
|----------|-------------|
| 1        | Test Lesson |
| typeId | label                 |
|--------|-----------------------|
| 1      | warming-up            |
| 2      | game                  |
| 3      | technical instruction |
| lessonId | typeId |
|----------|--------|
| 1        | 1      |
| 1        | 2      |
| 1        | 3      |

我在 PHP 中使用 PDO 从数据库中检索课程。现在我想上一课,它是一个查询的类型。结果(编码为 JSON)应如下所示。如果查询以逗号分隔列表的形式返回类型,那会很好,然后我可以使用 PHP 对其进行解析。

{
  "lessonId" : 1,
  "title" : "Test Lesson",
  "types" : [
    {
      "typeId" : 1,
      "label" : "warming-up"
    },
    {
      "typeId" : 2,
      "label" : "game"
    },
    {
      "typeId" : 3,
      "label" : "technical instruction"
    }
  ]
}

我应该使用什么 SQL 查询来获得这个结果?

【问题讨论】:

  • 我在这里找到了解决方案:link。我的问题已关闭,因此我无法将其添加为答案或将我的问题标记为重复。

标签: php mysql sql arrays json


【解决方案1】:

您可以使用 JSON 函数:

select l.*,
    (
        select json_arrayagg(json_object('typeid', t.typeid, 'label', t.label))
        from lesson_types lt
        inner join types t on t.typeid = lt.typeid
        where lt.lessonid = l.lessonid
    ) as types
from lessons l

【讨论】:

  • 我的服务器使用的 SQL 没有 json_arrayagg() 函数。
  • @JimProgrammer:你运行的是哪个版本的 MySQL? select version()可以告诉你。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多