PHP/MySQL Поиск двух полей в одной таблице

Я создаю свой первый сайт PHP/MySQL, и я хотел бы вернуть результаты поиска из двух полей в моей одной таблице в базе данных - категория и местоположение (всего в таблице 15 полей, но для Поиск).

Каждый вариант будет иметь раскрывающееся меню, в котором будет указано фиксированное количество вариантов в каждом поле — например, вероятно, будет 15 или около того местоположений и 7 или 8 категорий.

Я хочу, чтобы пользователь мог выбрать элемент из одного или обоих раскрывающихся меню, нажать кнопку «Поиск» или «Перейти» и получить результаты.

Как уже упоминалось, я новичок в PHP/MySQL, поэтому прошу прощения, если мой вопрос немного «простой», и я надеюсь, что кто-то может указать мне правильное направление.

Спасибо Дэн

РЕДАКТИРОВАТЬ:

Брэд, Коннер, у меня пока ничего нет, я боюсь специфики поискового запроса, я только начинаю исследовать, как это сделать, поэтому в моем вопросе полное отсутствие кода!

Но чтобы попытаться быть более конкретным, единственные поля, из которых я хочу вернуть результаты, — это «Местоположение» и «Категория работы» — это два поля примерно из 15 в моей таблице, которые уже заполнены фиксированными терминами — например, «Местоположение» может иметь Лондон, Манчестер, Leeds и Catagory могут иметь административный, управленческий, канцелярский и т. д. - у посетителя нет возможности ввести новый термин, только выбор из выпадающего меню заранее подготовленных элементов.

Другие поля в моей таблице не имеют отношения к поиску (зарплата, компания, контактный адрес электронной почты и т. д.), поэтому... я думаю, что мне нужно только два запроса, и результаты также могут отображаться, если вы отправите только один (например, вас не беспокоит место работы, только специальность, вы все равно можете найти все результаты и решить, хотите ли вы переехать). Это лучше или полезнее?

Спасибо за вашу помощь до сих пор. Дэн


person Dan    schedule 16.06.2011    source источник
comment
Дэн, проблема с твоим вопросом не в простоте, а в том, что информации недостаточно. Можете ли вы показать нам схему вашей таблицы и какие запросы вы используете до сих пор? Кроме того, прочитайте FAQ здесь: stackoverflow.com/faq Спасибо.   -  person Brad    schedule 17.06.2011
comment
Вы хотите вернуть все категории местоположения и работы, несмотря ни на что? Или у вас есть условие, например, получить все местоположения и категории вакансий, где местоположение находится в Техасе?   -  person Connor Smith    schedule 17.06.2011
comment
Извините за отсутствие конкретики, потому что у меня их пока не так много. Надеюсь, отредактировано выше, чтобы быть более полезным.   -  person Dan    schedule 17.06.2011


Ответы (3)


Пользователь вводит поисковый запрос, и вы хотите выбрать строки из таблицы, которые содержат или точно соответствуют этому запросу? Если да, то что-то вроде

Ибо если category содержит $search_query

SELECT category, location 
FROM table 
WHERE concat(' ', category, ' ') LIKE '%$search_query%'

Или, если это совпадение exact, вы должны использовать это вместо своего условного выражения:

WHERE category = '$search_query'

Я, вероятно, сбился с пути, вам нужно указать, как сказал Брэд

person Connor Smith    schedule 16.06.2011
comment
Привет, я бы перефразировал ваше вступление на «Пользователь ВЫБИРАЕТ поисковый запрос, и вы хотите выбрать строки из вашей таблицы, которые содержат или точно соответствуют этому запросу?» Спасибо, Дэн - person Dan; 17.06.2011
comment
Хорошо, я подумал, может быть, у вас есть панель поиска, я не знал, что все было предварительно заполнено. Дайте мне знать, если вам нужна дополнительная помощь, и я отредактирую свой ответ :) - person Connor Smith; 17.06.2011
comment
Спасибо, Коннор, я поиграю с тем, что вы предложили, и, вероятно, скоро вернусь. Спасибо еще раз, - person Dan; 17.06.2011

Дэн, вам нужно динамически построить свой оператор sql. Ниже приведен простой фрагмент кода, чтобы продемонстрировать, что я имею в виду. Всегда следите за тем, чтобы пользовательские данные были защищены от sql-инъекций.

if ( isset($_POST['go']) ){
      $location = $_POST['location'];
      $category = $_POST['category'];
      $sql = "SELECT * FROM table ID IS NOT NULL ";

      if ( $location !="" ){
           $sql .= " AND location = " . $location;
      }

      if ( $category !="" ){
           $sql .= " AND category = " . $category;
      }

}
person Syed Hussim    schedule 16.06.2011
comment
Вы также можете использовать !empty($location) и !empty($category) - person Connor Smith; 17.06.2011
comment
Привет, Сид, я не думаю, что мне нужно что-то избегать, поскольку у пользователя нет возможности что-либо вводить, он может выбирать только из одного или обоих из двух раскрывающихся списков. - person Dan; 17.06.2011
comment
Если вы передаете 0 в качестве идентификатора местоположения или идентификатора категории, вы не можете использовать пустую функцию, поскольку пустая функция будет оценивать 0 как пустую. Это только для того, чтобы добавить другие параметры, для которых требуется 0. - person Syed Hussim; 17.06.2011
comment
@Dan, это аутентифицированная страница? если нет, пользователь может сохранить страницу в формате html на своем компьютере, изменить значение в раскрывающемся меню и отправить форму обратно на ваш сервер с измененными значениями. И если бы это не было выбором хакера, он мог бы просто создать собственный php-скрипт и отправить данные, используя те же поля формы, на ваш сервер. - person Syed Hussim; 17.06.2011
comment
нет наверное нет! Я новичок в PHP/MySQL Sid, вчера я построил свою базу данных и заставил свои сценарии общаться с ней, так что я, мягко говоря, немного зеленый. Спасибо за вашу помощь и наводку. Дэн - person Dan; 17.06.2011

Без каких-либо подробностей о структуре вашей таблицы и данных, о которых идет речь, основы будут выглядеть примерно так:

SELECT ...
FROM ...
WHERE (field1 = $location_option) or (field2 = $category_option)
person Marc B    schedule 16.06.2011