2014-10-29 2 views
0

나는 images이있는 게임을하고 있는데 각 이미지는 keywords이고 각 키워드는 점수가 있습니다.MySQL : 여러 테이블에서 중첩 목록 선택

내가 모든 이미지를 얻으려면, 그것은 gameId

내 데이터베이스 구조에 의해 (점수) 키워드 것은 다음과 같이이다 :

게임

  • ID

Image

  • ID
  • 게임 ID
  • 이미지 URL

키워드

  • 키워드
  • 점수
  • imageId

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

내 SQL 쿼리는 다음과 같습니다 :

나는이처럼 보이는 JSON 응답 싶어

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 - Operand should contain 1 column(s)

내가 뭘 잘못하고 있니? 응답에 배열을 중첩시킬 수 없습니까?

답변

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이있을 것이다 * 값을 일부 행에

+0

ARH 괜찮습니다. 내가 참조. 그래서 원하는 구조를 얻기 위해 새로운 배열에 데이터를 매핑해야합니까? –

+0

@Kenneth B 다음과 같은 메시지가 표시됩니다. Row1 = {gameId : 1, imageId : 1, keyword : "keyword1", score : 1234}; Row2 = {게임 ​​ID : 1, 이미지 ID : 1, 키워드 : "keyword2", 점수 : 1234} ... – Multisync

+0

감사합니다. 지금은 이해합니다 ... 감사합니다 .-) –

관련 문제