2016-06-11 3 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 = london и country = 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%') 

Пожалуйста, не conside синтаксической ошибки, но логики.

этот код не возвращает 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

PLS принять ответ, если он работает :) – RJJ