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

时间:2014-10-29 19:47:10

标签: php mysql sql select

我正在制作一款游戏,其中我有一些images,其中每张图片都有一些keywords,每个关键字都有一个分数。

我想通过gameId

获取所有图片及其关键字(带分数)

我的数据库结构如下:

游戏

  • ID

图像

  • ID
  • 游戏ID
  • IMAGEURL

关键字

  • 关键字
  • 得分
  • 图像标识

我想获得一个如下所示的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列

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

1 个答案:

答案 0 :(得分:0)

否则您无法在选择列表中嵌套数组。

也许你需要这个:

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。*值