2011-12-08 9 views
1

クエリに条件フィールドを追加する際に問題があります。 クエリは、自分のWebサイトに公開されているジョブを返します(多数の結合、非常に特殊なものはありません)。問題は、現在のユーザーがこのジョブに既に適用されているかどうかを知るために別のフィールドを追加する必要があることです(APPLYボタンを削除するため)。結合クエリのMySQL条件フィールド

私はuser_idとjob_idを持つjobApplicationテーブルを持っていますテーブル。私は別の結合を使うことを考えましたが、それはうまくいきません。私はIFとそれを作成し、SELECTしようとしましたが、かなりそれを動作させるために管理しませんでした:/ ...

をこれが私のクエリです:

SELECT *, j.job_id as jid, c.name as city_name 
FROM jobs j 
    JOIN areas a ON a.area_id = j.job_area 
    JOIN positions p ON p.position_id = j.job_position 
    JOIN fields f ON f.id = j.job_field 
    JOIN cities c ON j.job_city = c.id 
    JOIN jobTypes jt ON j.job_type = jt.job_id 
    JOIN companies comp ON j.job_company = comp.company_id 
    LEFT JOIN jobApplications ja ON <missing> 
WHERE j.job_field = '$field' AND j.job_position = '$position' 
    AND j.job_area = '$area' 
ORDER BY j.creationDate DESC" 

私は条件を追加するために行われた試みが選択します誰かが私に良い方向を与えることができたら、質問を破った?

ありがとうございます!

+0

は、私はちょうどコースの原則を必要とする、私は私のデータベーステーブルの上にそれを再現しようとするでしょう:) – Yanipan

+1

私は、読みやすくするために、クエリを再フォーマットしています。ただし、最後の結合でON条件が欠落しています。 –

+0

ahhh @ a'rあなたは私にそれを打つ、私はちょうど約(とにかく、私はまた、SQLタグを追加しました – ComputerSaysNo

答えて

2

あなたのスキーマについて詳しく知ることなく確実に言うのは難しいですが、左の結合で正しい軌道に乗っています。現在のユーザーの申請者IDとジョブテーブルのジョブIDを使用して、応募者テーブルに参加する必要があります。

SELECT 
*, 
j.job_id as jid, 
c.name as city_name 
FROM jobs j 
JOIN areas a ON a.area_id = j.job_area 
JOIN positions p ON p.position_id = j.job_position 
JOIN fields f ON f.id = j.job_field 
JOIN cities c ON j.job_city = c.id 
JOIN jobTypes jt ON j.job_type = jt.job_id 
JOIN companies comp ON j.job_company = comp.company_id 
LEFT JOIN jobApplications ja ON ja.applicantId = '$applicantId' and ja.jobId = j.jobId 
WHERE 
j.job_field = '$field' 
AND j.job_position = '$position' 
AND j.job_area = '$area' 
ORDER BY j.creationDate DESC" 
+0

ahhhh私はONに変数を追加することはできませんが、私はその列に一致するようにしなければなりません...ありがとうございました。 – Yanipan