2012-07-02 3 views
3

나는 4 개의 테이블을 가지고있다. 사용자가있는mysql join table

  1. 표 A - (user_id, username, and name)
  2. 표 B 토큰을 갖는 - (token_id, user_id). 각 사용자는 10 개의 토큰 항목을 갖습니다. 각 토큰은 한 명의 사용자에게만 할당됩니다. 사용자가 여러 개의 토큰을 가지고 있습니다 (10)
  3. 아케이드 게임 인 테이블 C - (arcade_id, token_id, name, levels, lives)입니다. 하나의 아케이드 게임에만 하나의 토큰 만 지정할 수 있습니다.
  4. 표 D는 상품 - (prize_id, token_id, name, length, width, height)입니다. 하나의 상품에만 하나의 토큰 만 지정할 수 있습니다.

토큰은 아케이드 게임이나 상금 또는 아무것도 아닌 상금에 할당됩니다.

제 질문은 주어진 사용자의 토큰이 게임이나 상금에 할당되었거나 아직 할당되지 않은 것을 알아 내기 위해 MySQL 가입 쿼리를 설정하는 것입니다. 내 테이블 레이아웃이 최적입니까? 아니면 다른 레이아웃에 대한 제안 사항이 있습니까? - 토큰 ID 1이 게임에 할당 된 사용자의 경우 1

, 그들은이 토큰을 가지고 :

mysql> select * from users; 

+---------+--------+ 
| user_id | name | 
+---------+--------+ 
|  1 | User 1 | 
|  2 | User 2 | 
|  3 | User 3 | 
|  4 | User 4 | 
+---------+--------+ 

mysql> select * from tokens; 

+----------+---------+ 
| token_id | user_id | 
+----------+---------+ 
|  1 |  1 | 
|  2 |  1 | 
|  3 |  2 | 
|  4 |  2 | 
|  5 |  2 | 
|  11 |  2 | 
|  6 |  3 | 
|  7 |  3 | 
|  10 |  3 | 
|  8 |  4 | 
|  9 |  4 | 
+----------+---------+ 

mysql> select * from prizes; 

+----------+----------+-----------+ 
| prize_id | token_id | prizename | 
+----------+----------+-----------+ 
|  1 |  4 | prize 1 | 
|  2 |  7 | prize 2 | 
|  3 |  8 | prize 3 | 
|  4 |  9 | prize 4 | 
+----------+----------+-----------+ 

mysql> select * from arcade; 

+-----------+----------+----------+ 
| arcade_id | token_id | gamename | 
+-----------+----------+----------+ 
|   1 |  1 | game 1 | 
|   2 |  2 | game 2 | 
|   3 |  3 | game 3 | 
|   4 |  5 | game 4 | 
|   5 |  11 | game 6 | 
+-----------+----------+----------+ 

가 나는 다음과 같은 정보를 얻을 수있는 SQL 쿼리를 싶습니다 여기

내 테이블입니다 1이고 토큰 ID 2는 게임 2에 할당됩니다.

또는 사용자 2 - 토큰 ID 3은 게임 3에 할당되고 토큰 ID 4는 상금 1에 할당되고 토큰 ID 5는 게임 4에 할당됩니다 .

또는 3 사용자 - 3 토큰 - 토큰 ID 6이 아직 할당되지 않았습니다. 토큰 ID 7은 상금 2입니다. 토큰 ID 10은 할당되지 않았습니다.

등등.

나는 사용자 ID를 지정하고 위의 모든 정보를 얻을 곳이

Select **** 
    from ***** 
Where user_id = 1 

같은 MySQL의 쿼리 문자열을 구축하고 싶습니다.

+0

http://sqlfiddle.com에서 샘플 데이터를 제공해 주실 수 있습니까? –

답변

1

이 쿼리를 시도하지만 일부 데이터가 있다면 내가
가 그런 다음이

select * 
from `user` 
    left join token 
    on user.user_id = token.user_id 
    left join games 
    on games.token_id = token.token_id 
    left join prize 
    on prize.token_id = token.token_id 
where user.user_id = 1 
을 할 수있는 가장 간단한 일해야한다 편집을 할 더미 데이터

select 
    t.token_id, 
    IFNULL(g.game,'') as Game, 
    IFNULL(p.name,'') as Prize, 
    case when g.game != '' then 'Assigned' when p.name != '' then 'Assigned' else 'Not assigned yet' end as `Status` 
from token as t 
    left join (select * 
     from games 
     where token_id not in(select 
        token_id 
        from prize)) as g 
    on g.token_id = t.token_id 
    left join (select * 
     from prize 
     where token_id not in(select 
        token_id 
        from games)) as p 
    on p.token_id = t.token_id 

으로 확인하고 있지만 내가 확인 할 수있을 것이다

+0

게시물을 내 테이블로 업데이트했습니다. 그게 도움이 되니? –