Привет, У меня возникают трудности с написанием идеального SQL-запроса, который будет искать адрес или почтовый индекс (английский).
Я сохранил свой почтовый индекс как "W1Y TF7". Если пользователь ищет "W1YTF7" (без пробела), это дает мне какой-либо результат, когда предполагается вернуть W1Y TF7.
вот мой запрос:
SELECT DISTINCT *
FROM venue
WHERE Name LIKE '%$searchValue%'
OR Postcode LIKE '%$searchValue%'
OR Address2 LIKE '%$searchValue%'
OR Postcode LIKE '$searchValue%'
Я бы, вероятно, сохранил почтовые индексы в базе данных без пробела. Затем вы можете просто удалить пробелы из строки перед запуском SQL-запроса.
Если вы хотите сохранить текущую настройку, почему бы не преобразовать ввод в ожидаемый формат, прежде чем он достигнет уровня SQL? Просто добавьте пробел, если он не существует.
Вы можете создать столбец поиска, создать новое поле, которое вы вызываете SearchColumn в таблице места размещения, затем сделать SELECT и UPDATE trigger который устанавливает одинаковые значения во всех полях, которые вы хотите использовать (адрес_узла + имя + адрес1 + адрес2 + город + почтовый индекс + номер телефона + URL). ех. если вы вставляете. Также приятно включить это как index.
Затем вам нужно:
SELECT DISTINCT Name
FROM venue
WHERE SearchColumn LIKE '%Search value%'
Ну, первая ошибка: я мог видеть, что вы столкнулись с некоторыми проблемами здесь, если вещи непосвящены (если $searchValue - пустая строка или очень маленькая строка). Это всегда возвращает очень большой набор данных (и может занять некоторое время).
для почтового индекса, вы можете сделать (LEFT(Postcode, 3) = LEFT($searchValue, 3) AND RIGHT(Postcode, 3) = RIGHT($searchValue, 3))
также вы можете посмотреть в подготовленные заявления и привязку значений, но что совсем другая проблема