2012-01-02 3 views
0

私はこの左が特定のスーパーバイザーのasignedグループにある従業員にすべてのジョブのリストを表示するには、クエリに参加持って、それは素晴らしいmysqlはjoinとunionを残しましたか?

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = '$myVar') 

に動作します。しかし、今、私が投稿するように選択して追加する必要がありますスーパーバイザもそれを見ることができます、私はビューアのセッションIDを保持する$ myVarを設定します。私は、私はそれを修正すればどのようにこの

SELECT * 
FROM jobs j 
LEFT JOIN groups g ON g.group_number = j.relevant_group 
WHERE j.relevant_group = 0 
OR (g.supervisor_id = j.job_lister_id AND g.employee_id = '$myVar') 
OR (j.job_lister_id = '$myVar') 

しかし、上司は物件が多数回の投稿見て、彼にログインしたとき(重複量は常にグループの人々の数に等しい) を試してみましたか?

答えて

1

groupsのフィールドが実際に結果セットに必要ですか?返信するのはjobsのレコードを特定するためにgroupsを使用しているようですその場合は、JOINを省略し、代わりにサブクエリを使用する必要があります。たとえば、次のように書くことができます。

SELECT * 
    FROM jobs j 
WHERE j.job_lister_id = '$myVar' 
    OR j.relevant_group = 0 
    OR EXISTS 
     (SELECT 1 
      FROM groups g 
      WHERE g.group_number = j.relevant_group 
      AND g.supervisor_id = j.job_lister_id 
      AND g.employee_id = '$myVar' 
     ) 
; 
+0

はい、あなたのアプローチははるかに良いと思います。ありがとうございます –

+0

@FredTurner:ようこそ! – ruakh

関連する問題