2017-12-03 4 views
0

ユーザーをログオンすると、彼のクラスやチームなどの個人情報を取得したいと思います。私はクラスを取得することができましたが、私がチームを取得しようとすると動作しません。MySQLチェーン内部JOINエラー

私は3つのテーブル(ユーザー、チーム、クラス)と2つの結合テーブル(teams_usersとclasses_users)を持っています。以下

関係:

classes (id_classe) <--> classes_users (classe_id, user_id) <--> users (id_user) 
teams (id_team) <--> teams_users (team_id, user_id) <--> users (id_user) 

これは

SELECT * FROM classes `c` 
INNER JOIN (SELECT * FROM classes_users `cu` 
INNER JOIN (SELECT * FROM users WHERE (users.email = '[email protected]')) 
`u` ON (u.id_user = cu.user_id)) 
`ui` ON (ui.classe_id = c.id_classe) 

を働いていた。しかし、私はそれが機能しなかったの下に別の参加を追加しようとしたとき。

SELECT * FROM teams_users `tu` 
INNER JOIN (SELECT * FROM classes `c` 
INNER JOIN (SELECT * FROM classes_users `cu` 
INNER JOIN (SELECT * FROM users WHERE (users.email = '[email protected]')) 
`u` ON (u.id_user = cu.user_id)) 
`ui`ON (ui.classe_id = c.id_classe)) 
`wc` ON (wc.id_user = tu.user_id) 
+0

あなたのクエリのエラーは、WHERE(users.email = '[email protected]')の括弧であると思います。これで括弧を外すと、それが機能します。しかし、以下のゴードンの答えが最も簡潔な方法です – Ramesh

答えて

1

すべてのかっことサブクエリはなぜですか?

SELECT * 
FROM teams_users tu INNER JOIN 
    users u 
    ON u.id_user = tu.user_id INNER JOIN 
    class_users cu 
    ON u.id_user = cu.user_id INNER JOIN 
    classes c 
    ON cu.classe_id = c.id_classe 
WHERE u.email = '[email protected]'; 
+0

ありがとう、私は間違ったことを理解しています。私はネイティブクエリに戻るクエリビルダーsquelを使用していました。最も重要なのは、私はtu.team_id = t.id_teamの代わりにu.team_id = t.id_teamを使用しました。 – Pfeiff86