2011-09-17 20 views
1

制限:ジョブは例えば複数の場所を持っている場合、私は_default追加した各参加テーブルについてSQLはどこで参加し、私はどのように把握しようとしています

- Select 10 random jobs 
- Join the default jobs location name 
- Join the default jobs sector name 

を。

私は以下のデータベース構造を持っています。 enter image description here

問題は、このクエリが同じジョブを2回以上返すことです。

SELECT j.job_id, j.job_name, j.job_uri, j.job_image1, s.section_name as section 
FROM jobs j 
LEFT JOIN job_sectors js ON j.job_id = js.job_id 
LEFT JOIN sectors s ON s.sector_id = js.sector_id 
WHERE j.job_featured = '1' 
AND j.job_status = 'ENABLED' 
ORDER BY RAND() 
LIMIT 10 
+0

この '_default'をどのように使用できるかははっきりしていません。それは正確にどこに格納されていますか? –

+0

job_locationsとjob_sectorsの両方に_defaultを持つ列があり、デフォルトIFを複数設定できるIFを設定するために使用できます。たとえば、ジョブに複数の場所がありますが、メインジョブの場所はデフォルトになります。 –

+0

'job_sector_default'と' job_location_default'の両方を見落としてしまいました。申し訳ありません。したがって、 'job_sector_default'は、同じ行の' job_id'に対してデフォルトであるセクタを参照し、同様にlocationに対してもそうですか?デフォルトのセクタも 'job_sectors'にありますか?' _default'カラムにのみ保存されていますか? –

答えて

2

サブクエリで10個のジョブを選択できます。 1つのジョブに複数のセクタがあると、10行以上のジョブが残ってしまいますが、それでも10個のジョブになります。

select * 
from (
     select * 
     from jobs 
     where jobs.job_featured = '1' 
       and jobs.status = 'ENABLED' 
     order by 
       rand() 
     limit 10 
     ) as j 
left join 
     job_sectors js 
on  js.job_id = j.job_id 
left join 
     sectors s 
on  s.sector_id = js.sector_id 
関連する問題