MySQL запрос для поиска адреса или почтовый индекс

0

Привет, У меня возникают трудности с написанием идеального SQL-запроса, который будет искать адрес или почтовый индекс (английский).

Я сохранил свой почтовый индекс как "W1Y TF7". Если пользователь ищет "W1YTF7" (без пробела), это дает мне какой-либо результат, когда предполагается вернуть W1Y TF7.

МЕСТО

  • VenueID
  • Имя
  • Адрес1
  • Адрес2
  • Город
  • Индекс
  • PhoneNumer
  • URL

вот мой запрос:

SELECT DISTINCT *
 FROM venue 
WHERE Name LIKE '%$searchValue%' 
   OR Postcode LIKE '%$searchValue%'
   OR Address2 LIKE '%$searchValue%' 
   OR Postcode LIKE '$searchValue%' 
  • 0
    У вас есть ИЛИ Почтовый индекс LIKE "% $ searchValue%" и ИЛИ Почтовый индекс LIKE "$ searchValue%" . Вы понимаете, что первое условие включает в себя второе, верно?
Теги:

3 ответа

2

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

Если вы хотите сохранить текущую настройку, почему бы не преобразовать ввод в ожидаемый формат, прежде чем он достигнет уровня SQL? Просто добавьте пробел, если он не существует.

  • 0
    Простое и элегантное решение.
  • 0
    Я думал об этом, но проблема в том, что, поскольку я не знаю, что ищет пользователь, потому что он может искать адрес или почтовый индекс, я не могу начать удалять пробелы. Например, если пользователь ищет «19 arygll street», я не могу начать удалять пробелы, потому что это приведет к чему-то нереализуемому.
Показать ещё 1 комментарий
0

Вы можете создать столбец поиска, создать новое поле, которое вы вызываете SearchColumn в таблице места размещения, затем сделать SELECT и UPDATE trigger который устанавливает одинаковые значения во всех полях, которые вы хотите использовать (адрес_узла + имя + адрес1 + адрес2 + город + почтовый индекс + номер телефона + URL). ех. если вы вставляете.  Также приятно включить это как index.

Затем вам нужно:

SELECT DISTINCT Name
      FROM venue
       WHERE SearchColumn LIKE '%Search value%'
  • 0
    Сри, я в замешательстве. Я не могу видеть общую картину, как это помогает с поиском. Пожалуйста, если вы не возражаете, вы можете объяснить дальше
  • 0
    Идея заключается в том, что вы добавляете столбец searchColumn, который будет содержать, например: «Поместите xW1Y TF7foostreet 77Manchester», и вы будете делать там, где searchColumn LIKE «% user input%». Это не поможет вам с возможно удаленным почтовым индексом, хотя
0

Ну, первая ошибка: я мог видеть, что вы столкнулись с некоторыми проблемами здесь, если вещи непосвящены (если $searchValue - пустая строка или очень маленькая строка). Это всегда возвращает очень большой набор данных (и может занять некоторое время).

для почтового индекса, вы можете сделать (LEFT(Postcode, 3) = LEFT($searchValue, 3) AND RIGHT(Postcode, 3) = RIGHT($searchValue, 3))

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

  • 0
    Я только что попробовал это, и он говорит об ошибке в синтаксисе SQL. ЛЕВЫЙ sql sntax?
  • 0
    Я не совсем уверен, что это ISO SQL, но я знаю, что он есть в MySQL и T-SQL (не уверен насчет PL / SQL) (с этим синтаксисом см. Dev.mysql.com/doc/refman/5.0/en. /… ) Не могли бы вы дать реальный оператор SQL, который вы пытаетесь?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню