Есть заявки, у заявки есть параметры, каждый параметр в своей таблице. Надо выбрать заявки которые подходят под условия. (те для where всё известно) Всё вроде просто, но глаз уже замылился, где-то туплю.
В разных заявках может быть указано разное кол-во параметров.
пример из жизни это — подобрать под объект из рубрики «сдам», объявы из рубрики «сниму» (тех кто хочет снять)
схема
допустим:
заявка #1
prop1 = 25 и 6
prop2 = 5
заявка #2
prop1 = 25
при исходном условии:
prop1 = 25 надо выбрать 2 заявки
prop2 = 5 выбрать 1ю заявку
prop2 = 7 не выбирать ни одной
prop3 = 6 не выбирать ни одной
Насколько я понимаю, это вариант реализации EAV. Не сильно удачный прямо скажем, ну да ладно.
Вам нужно составить запрос по заявкам со всевозможными параметрами, что-то типа:
select r.id, r.title
p1.value as p1value,
p2.value as p2value,
...
pn.value as pnvalue
from request r
left join prop1 p1 on r.id = p1.req_id
left join prop2 p2 on r.id = p2.req_id
...
left join propn pn on r.id = pn.req_id
Запрос такой проще всего было бы формировать циклом, но не знаю какие у вас там реальные имена таблиц и отличаются ли поля, в любом случае такой запрос нужно уметь собирать. А если количество таблиц параметров у вас фиксированное, то можно и захардкодить его в конце концов (при этом, понятное дело, теряется смысл EAV, но тоже ладно)...
Дальше просто добавляете фильтр этому запросу:
where
p1.value in (1,3,7)
and p2.value > 10
...
and pn.value between 30 and 40
ну понятно фильтры могут быть любые - по одному или нескольким параметрам. Смысл в том, что если параметра, по которому идет фильтр, нет у заявки, то она отбросится, а если есть, то отфильтруется по значению.
Чтобы подбирать заявки "сниму" под заявку "сдам" и наоборот, просто берете значения для фильтра по необходимым параметрам и подставляете в запрос выше в условия.
Вы уж не обессудьте, я, признаться, в вашей схеме со всеми этими prop1, prop2 и prop3 мало что понял. Тем не менее, исходя из ранее означенного условия про "сдать" - "снять" я бы сделал примерно так:
Далее для того, чтобы "подобрать под объект из рубрики «сдам», объявы из рубрики «сниму»" нужно сделать простой join с указанием типа интересующей недвижимости и, возможно, ценовой вилки. Для пущей нормализованности можно разнести по отдельным таблицам типы недвижимости (квартира, комната, коттедж) и ее атрибуты (однокомнатная, двухкомнатная и тд), вынести в отдельную таблицу тип предложения (сдам, сниму, куплю, продам)
Не знаю, насколько моя модель соответствует вашей предметной области, но все же надеюсь, чем-то помог
используйте вложенные запросы.
SELECT ... FROM table1 WHERE ... IN (SELECT ... FROM ...);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть таблица "фразы" с полем "фраза"Есть таблица "фильтр" с полем "слово"
Ребята, помогите пожалуйста разобратьсяЯ в програмировании разбираюсь очень плохо, и потому обращаюсь к вам
из двух таблиц, имеющих одинаковое количество записей, с общим полем необходимо выбрать данные (по строчке из таблицы)как быстрее это сделать:...