Мне нужно создать графический интерфейс, с помощью которого пользователи могут выбрать несколько атрибутов, которые будут использоваться для запроса базы данных, чтобы найти подходящих людей. Я ищу идеи, как динамически генерировать запрос к базе данных в соответствии с выбором пользователя.
Запрос будет содержать несколько полей, но чтобы понять, я приведу в качестве примера только три из них:
Занятие - может быть от 0 до n строк занятости. Если заданы строки занятия, одна из них должна соответствовать.
Возраст - возраст может быть задан как:
- точное совпадение (30)
- диапазон (например, 30-40)
- меньше значения (-40)
- больше значения (30 -)
Параметр возраста является необязательным в запросе. Кроме того, пользователь может указать, является ли возраст обязательным параметром. Если это не требуется, и в его профиле не указан возраст, критерии возраста для этого человека игнорируются.
- Рост - аналогично возрасту
Примеры запросов:
Нет критериев:
select * from persons
Дано только занятие:
select * from persons where occupation = 'dentist'
Было дано несколько занятий:
select * from persons where (occupation = 'dentist' or occupation = 'engineer')
Возраст указан как значение, превышающее значение, и он должен существовать в профиле человека:
select * from persons where age >= 30
Рост указан как диапазон, и он не обязательно должен присутствовать в профиле человека:
select * from persons where (height is null or (height >= 30 and height <= 40))
Сочетание разных критериев:
select * from persons where occupation = 'dentist' and age >= 30 and (height is null or (height >= 30 and height <= 40))
Я уже реализовал код, который способен генерировать запросы в виде строк, но он, конечно, не слишком красив. Я ищу идеи, что было бы наиболее эффективным и красивым способом для достижения этой цели.