Возможно, ваша структура базы данных может быть изменена, чтобы помочь вам. Например, я предполагаю, что у вас есть отношения между городами и клиентами. Похоже, что «Бизнес» - это что-то вроде «Технология» или «Поиск», в каком случае у вас может быть несколько клиентов с одним Бизнесом? Может стоить перенести бизнес на отдельную таблицу, а затем сослаться на них. Тогда у вас может быть простой запрос, такой как:
SELECT *
FROM clients
WHERE clients.city = {form result: cities.id}
AND clients.business = {form result: businesses.id}
ORDER BY clients.name
LIMIT 0, 30
Теперь, предполагая, что пользователь не заполняет одно из полей (например, город), у вас есть два варианта: заставить их заполнить его, проверяя введенные пользователем данные, или использовать его как подстановочный знак, в этом случае вы можете удалить WHERE clients.city
пункт из вашего запроса. Предполагая, что вы даете <select>
значениям опций id
из городов.
Программно я бы построил запрос в этом случае:
$queryStr = 'SELECT * FROM clients';
if (!empty($_POST['city']) && !empty($_POST['business'])) {
$queryStr .= ' WHERE city = ' . filter($_POST['city']) . ' AND business = ' . filter($_POST['business']);
} elseif (!empty($_POST['city'])) {
$queryStr .= ' WHERE city = ' . filter($_POST['city']);
} elseif (!empty($_POST['business'])) {
$queryStr .= ' WHERE business = ' . filter($_POST['business']);
} else {
// pass
}
$queryStr .= ' ORDER BY name LIMIT 0, 30';
Где фильтр - ваш метод фильтрации.