Cela devrait vous donner ce dont vous avez besoin... Chacune des conditions de la clause "OR"d where, vous pouvez simplement continuer à l'ajouter en tant qu'élément qualifié. Ensuite, ajustez simplement la clause "Avoir" pour qu'elle corresponde au même nombre que les critères que vous autorisez ... J'ai mis la table des relations en premier car cela aurait un ensemble correspondant plus petit sur la "Valeur" de la ville ou des valeurs de type .. . Assurez-vous d'avoir un index sur la table des relations dans la colonne "VALUE".
SELECT STRAIGHT_JOIN
rel.id_obj
from
relations rel
join attributes atr
on rel.id_addr = atr.id
where
( rel.value = 'Apartment' AND atr.name = 'Type' )
or ( rel.value = 'Some City' AND atr.name = 'City' )
group by
atr.id_obj
having
count(*) = 2
limit
0, 20
Si vous voulez toutes les données d'objet réelles de ces résultats, vous les envelopperiez quelque chose comme...
select obj.*
from
( complete SQL statement above ) PreQuery
join Object obj on PreQuery.id_obj = obj.id