2016-06-11 43 views
0

我正在處理客戶端項目,並在多重meta_key,元值搜索中苦苦掙扎。多個元鍵和元值搜索

我的數據庫結構就是這樣

 
clinics     clinics_meta 
=======     ============= 
id name    id fk_clinic_id meta_key meta_value 
1 dental    1 1    city  london 
2 heart    2 1    country england 
          3 2    city  manchester 
          4 2    country london 

我想診所city = londoncountry = england

我試過這樣

SELECT distinct(clinics.id) FROM clinics, clinic_meta 
WHERE clinics.id = clinic_meta.fkClinicId 
AND (clinic_meta.metaKey = 'clinicCountry' AND clinic_meta.metaValue like '%england%') 
AND (clinic_meta.metaKey = 'clinicCity' AND clinic_meta.metaValue like '%london%') 

請不要求索語法錯誤,但邏輯。

此代碼不會返回clinic name/id

,而不是使用兩個過濾城市,國家

如果我只用一個過濾器它返回診所名稱,但。

任何幫助將不勝感激。

感謝。

回答

0
select cl.* from clinics cl 
    inner join 
    clinics_meta cm1 
    on cl.id=cm.clinic_id 
    inner join 
    clinics_meta cm2 
    on cm1.clinic_id=cm2.clinic_id 
    where cm1.meta_key='Country' and cm1.meta_value='England' 
    and cm1.meta_key='City' and cm2.meta_value='London' 
    group by t1.id; 
+0

謝謝Long Dog, 如果metakey值過濾器的數量增加,我必須增加連接數嗎? –

+0

沒問題,看起來像,是的...如果沒有,我會爲clinics_meta添加一個索引: alter table clinic_meta add key(meta_key,meta_value); 我假設clinics_meta.clinic_id和clinic.id上已經有密鑰? – RJJ

+0

請接受答案,如果它的工作:) – RJJ