SQL - запрос через текстовое поле, которое может принимать разные значения - PullRequest
1 голос
/ 07 ноября 2008

Разрабатывая веб-сайт и просто пытаясь вернуться к множеству (умных) SQL-запросов и т. Д., Мой разум полностью исчез сегодня вечером!

Существует веб-сайт http://www.ufindus.com/, в котором есть текстовое поле, позволяющее ввести либо название места, либо почтовый индекс / почтовый индекс. Я пытаюсь сделать что-то похожее, но я мусор на SQL - так как вы строите оператор SQL, который потенциально может смотреть на 2 столбца (то есть место и почтовый индекс), потому что вы не можете запросить оба поля для того же значения, например

place = 'YORK' AND postcode = 'YORK'

или

place = 'YO21 5EA' AND postcode = 'YO21 5EA'

так что вам нужно ввести некоторую логику, чтобы быть достаточно умным, чтобы определить, выглядит ли это как название места или почтовый индекс - это просто кажется мне слишком сложным !! Любая помощь будет высоко ценится.

Ответы [ 4 ]

7 голосов
/ 07 ноября 2008

Вы можете использовать «ИЛИ», чтобы выполнить работу. Например,

place = 'YORK' или почтовый индекс = 'YORK'

Вы могли бы также лучше использовать оператор LIKE, как в

ГДЕ место LIKE 'YORK%' или почтовый индекс LIKE 'YORK%'

(предполагается, что и место, и почтовый индекс являются символьными столбцами)

3 голосов
/ 07 ноября 2008

почему бы не использовать ИЛИ вместо AND?

place = @textboxvalue OR post = @textboxvalue
0 голосов
/ 07 ноября 2008

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

Давайте назовем эту таблицу ' почтовый индекс ' со столбцами ' почтовый индекс ' и ' почтовый индекс '. Оба они типа чар.

Тогда ... что бы вы ни делали, убедитесь, что ввод от пользователя не является частью динамического sql. Убедитесь, что это параметр . В противном случае вы будете приглашать к внедрению SQL-атак, которые могут действительно испортить ваш день. Это важно .

Наш пользовательский ввод находится в @ textboxstring .

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

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode like @textboxstring or postplace like @textboxstring;

Обратите внимание, что я изменяю @textboxstring, чтобы получить совпадение с подстановочным знаком с like без использования динамического sql.

Если почтовый индекс был целым числом, вам нужно преобразовать ввод в int перед выполнением sql. Таким образом, с @textboxint, вы можете сделать это:

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode = @textboxint or postplace like @textboxstring;

Да, и вам нужно учесть, что ваш поиск может иметь несколько результатов. Вы, вероятно, хотите только первый ряд.

0 голосов
/ 07 ноября 2008

Что не так с попыткой совпадения по месту и почтовому индексу? Если я добавлю «Йорк» и (где-нибудь), который окажется действительным почтовым индексом, я должен получить этот результат. Что касается предотвращения ввода одного и того же дважды, хорошо, вы можете справиться с этим при проверке перед выполнением вызова базы данных.

Ах. Думаю, я был немного медленным на взятии. Да ... то, что другие предложили, верно, «ИЛИ» - это то, что вы искали. Я неправильно истолковал.

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