2011-12-09 11 views
0

だから、別のフィールドの値が0でない場合にのみフィールドを選択するのに問題があります。MySQLは動的にwhere句で結合内のフィールドを選択しますか?

ここでは何が起こっているのですか。 usersschoolscampuses

そして基本的に、私はこれらの3つのテーブルから単一のユーザデータを選択する必要があります -

私は3つのテーブルを持って、彼らがしています。 users.campus_idフィールドがない場合、私は唯一のキャンパスからcampus_nameフィールドを選択したい0クエリが渡されている

ので、擬似次のようにコード化された何かがあなたに良いアイデアを与えるかもしれません。..一部のユーザーのIDを持つ$id変数です。

SELECT users.*, schools.*, (if(users.campus_id != 0) then campuses.campus_name) 
FROM users, schools, campuses 
WHERE users.id = '$id' (if(users.campus_id != 0) then AND campuses.id = users.campus_id) 

答えて

0
SELECT * 
FROM schools, 
    users LEFT OUTER JOIN campuses 
     ON users.campus_id != 0 
     AND users.campus_id = campuses.id 
WHERE users.school_id = schools.id 
0

だからあなたは常にユーザーが学校を持っていることを期待し、一緒に3つのテーブルを結合しているが、彼らはキャンパスを持っていない可能性があり、このような場合には、明らかに何も表示されませんする必要があります。

あなたができることは、LEFT JOINキャンパスでこれを達成することです。下記のお擬似コードに基づいて

例:私が正しくあなたを理解している場合

SELECT u.*, s.*, c.campus_name 
FROM users u 
INNER JOIN schools s ON u.school_id = s.school_id 
LEFT JOIN campuses c ON u.campus_id = c.campus_id 
WHERE u.user_id = $userId 
0

、あなたはすべての情報が表示され、それが存在する場合にのみ、キャンパス名を表示するようにしたいですか?そこ

のエラー可能性があり、

SELECT `u`.* `s`.* if(`c`.`campus_name` != 0, `c`.`campus_name`, "") as `campus` 
FROM `users` as `u` 
INNER JOIN `schools` as `s` ON `u`.`school_id` = `s`.`school_id` 
LEFT JOIN `campuses` as `c` ON `u`.`campus_id` = `c`.`campus_id` 
WHERE `u`.`user_id` = $user_id; 

テストされていない、私の頭の上から書き込ま:もしそうなら、私は次の文は、トリックを行う必要があります信じています

関連する問題