MySQL:从多个表中选择嵌套列表


MySQL: Select nested list from multiple tables

我正在玩一个游戏,我有一些images,每个图像有一些keywords,每个关键字都有一个分数。

我想通过gameId 获得所有图像,并且是关键字(带分数)

我的数据库结构如下:

游戏

  • id

图像

  • id
  • 游戏ID
  • imageUrl

关键词

  • 关键字
  • 得分
  • imageId

我想得到一个JSON响应,如下所示:

{
    gameId: 1,
    images: [
        {
            imageId: 1,
            keywords: [
                {
                    keyword: "keyword1",
                    score: 1234
                }...
            ]
        }...
    ]
}

我的SQL查询如下:

SELECT g.*, (SELECT i.*, kw.* 
FROM image i LEFT OUTER JOIN keywords kw on kw.imageId=i.id 
where i.gameId = g.id) as images
FROM games g LEFT OUTER JOIN users u on u.id=g.byUser WHERE g.id = 1

但我得到了这个错误:

1241-操作数应包含1列

我做错了什么?我不能在响应中嵌套一个数组吗?

否,不能在选择列表中嵌套数组。

也许你需要这个:

SELECT g.*, i.*, kw.* 
FROM games g LEFT OUTER JOIN users u on u.id=g.byUser 
             LEFT OUTER JOIN image i on i.gameId = g.id 
             LEFT OUTER JOIN keywords kw on kw.imageId = i.id
WHERE g.id = 1;

但在某些行中会有额外的g.*值