MYSQL сложная выборка многое ко многим, как организовать?
Есть одна главная таблица с людьми - peoples. (id, name)
Есть 2 и более таблиц со свойствами этих peoples. (id, property_name)
Есть 2 и более таблиц связей для этих свойств c людьми people_name_property. (id, people_id, propery_id)
Есть 2 и более массива данных, с набором этих свойств, по некоторым свойствам массив может быть пуст.
Собственно вопрос - как с учетом переданных свойств выбрать всех людей, по связанным таблицам.
Конкретный пример:
Peoples (id, name)
Regions (id, region_name)
Peoples_to_region (id, people_id, region_id)
Metros (id, metro_name)
Peoples_to_metros(id, people_id, metro_id)
И есть 2 массива, содержащие в себе id регионов и станций метро
Как выбрать всех peoples для которых указан регион и метро из массива?
SELECT *
FROM Peoples
INNER JOIN peoples_to_region
ON Peoples_to_region.people_id = Peoples.id AND Peoples_to_region.region_id IN ({region_list})
INNER JOIN Peoples_to_metros.people_id = Peoples.id AND Peoples_to_metros.metro_id IN ({metro_list})
Только стоит учитывать, что если человек привязан к нескольким регионам\метро (не зря же многие ко многим), то эти люди будут в результате несколько раз. Если это нежелательно - добавьте DISTINCT