В MySQL как получить несколько значений из формы поиска с тремя полями? - PullRequest
1 голос
/ 18 апреля 2009

У меня есть две таблицы:

  1. Клиенты
  2. Город

Тогда в форме поиска у меня есть три поля:

  1. Текстовая форма для ввода имени клиента
  2. Поле для выбора города, в котором они хотят искать (таблица городов)
  3. Другое поле выбора, чтобы выбрать основной бизнес, который пользователь хочет найти (бизнес включен в таблицу клиентов)

В зависимости от выбора поля формы будет производиться поиск по двум таблицам.

Я думаю сделать несколько SQL-запросов в зависимости от выбора пользователя.

Проблема в том, что, возможно, пользователь не будет заполнять форму ввода с именем клиента, или, возможно, он будет, но не будет выбирать город и т. Д.

Так что мне придется делать несколько ifs, чтобы показать несколько запросов sql в зависимости от выбора пользователя? возможно у меня есть менее запутанное решение ...

Ответы [ 2 ]

2 голосов
/ 18 апреля 2009

Возможно, ваша структура базы данных может быть изменена, чтобы помочь вам. Например, я предполагаю, что у вас есть отношения между городами и клиентами. Похоже, что «Бизнес» - это что-то вроде «Технология» или «Поиск», в каком случае у вас может быть несколько клиентов с одним Бизнесом? Может стоить перенести бизнес на отдельную таблицу, а затем сослаться на них. Тогда у вас может быть простой запрос, такой как:

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';

Где фильтр - ваш метод фильтрации.

1 голос
/ 18 апреля 2009

Просто запросите БД с вашими критериями. Если клиенты / города действительно существуют, то они появятся, в противном случае запрос вернет пустой набор. Все просто, не нужно проверять существование любого из них - пользователь должен быть достаточно умен, чтобы иметь возможность придумать, например, существующее название города.

Единственное, что вам нужно сделать - это mysql_real_escape_string ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...