2016-06-11 44 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