Среда бега: IIS
Язык сценария: VBScript
База данных: Access/SQL Server
Язык базы данных: SQL
1 краткое содержание:
Независимо от динамических веб -сайтов, таких как форум, новостная система или система загрузки, каждый часто видит функцию поиска: посты поиска, пользователи поиска, программное обеспечение поиска (в коротких ключевых словах поиска) и т. Д. Практическая эффективность, поиск поиска в нескольких значениях на основе ASP.
Эта статья сталкивается с множественными условиями и смутным подходящим поиском, который понимает многокондиционирование, а один поиск в условиях не является кусочком торта. Вообще говоря, есть два способа поиска нескольких условий: перечисление и прогрессивные методы. Условие поиска не слишком длинное (n <= 3), а метод перечисления может быть использован. Очевидно, что когда условия увеличиваются, метод прогресса должен быть принят в обеих процедурах и может быть достигнут. Следует отметить, что метод перечисления очень прост, является ли условие суждения пустым, а затем искал в соответствии с неэмпатными условиями. С множеством условий (я считаю, что никто не собирается делать такие вещи в 4 условиях, нам уже приходится писать 16 наборов предложений); Это может использовать позицию логотипа (флаг), а второе - использовать строку в подключении к строке SQL. Давайте объясним установление двигателя по примеру.
2 Пример:
Мы установили двигатель запросов адресов.
Идентификационное название в Тель -школе
1 Три 333333333 Университет электронных наук и техники Электронной науки и техники
2 LI 4444444444 Биологический факультет Университета Сычуань
3 Wang 2222222222 Юго -западного университета Цзиотонга факультет архитектуры
... ... ... ...
Интерфейс веб -поиска выглядит следующим образом:
Имя: Тел: Школа: Кнопка поиска
Процедура источника метода перечисления заключается в следующем:
< %@ CodePage = 936 %>
'База данных соединений
<%
Dim Conn
Dim Dboath
Dim Rs
Dim SQL
Установить conn = server.createObject (adodb.connection)
Dbpath = server.mappath (addressbook.mdb)
Conn.Open Driver = {Microsoft Access Driver (*.mdb)};
Установить rs = server.createObject (adodb.oldset)
'Получите имя, телефон, стоимость школы с веб -страницы
тусклое имя
DIM TEL
Dim Schol
Имя = запрос (имя)
Тел = запрос (Тел)
Школа = запрос (школа)
'Ядро метода перечисления, поскольку существует 3 условия, вам нужно написать 8 групп, если высказывания суда
Если Trim (name) = и Trim (tel) = и Trim (School) = Then
SQL = SELECT * OF ADDREAR ORDER от ID ASC
конец, если
Если Trim (name) = и Trim (tel) = и Trim (School) <> Then
SQL = SELECT * Из адреса, где школа, как '%& trim (школа) и%порядок от ID ASC
конец, если
Если Trim (name) = и Trim (tel) <> и Trim (School) = Then
SQL = SELECT * из адреса, где тел, как '%& trim (tel) и%' Порядок по ID ASC
конец, если
Если Trim (name) = и Trim (tel) <> и Trim (School) <> Then
SQL = SELECT * из адреса, где TEL Like '%& Trim (TEL) и%' и школа, как '%& trim (школа) и%порядок от ID ASC
конец, если
Если отделка (имя) <> и trim (tel) = и trim (school) = then
SQL = SELECT * Из адреса, где имя, такое как '%& trim (имя) и%' Порядок по ID ASC
конец, если
Если отделка (название) <> и Trim (tel) = и Trim (School) <> Then
SQL = SELECT * из адреса, где название, такое как «%& trim (имя) и%» и школа, как «%& trim (школа) и%», порядок от ID ASC
конец, если
Если отделка (название) <> и обрезка (тел) <> и отделка (школа) = тогда
SQL = SELECT * из адреса, где имя, такое как '%& trim (имя) и%' и тел, как '%& trim (TEL) и%' Порядок, ID ASC
конец, если
Если отделка (имя) <> и отделка (тел) <> и обрезка (школа) <> Тогда
SQL = SELECT * Из адреса, где имя, такое как «%& trim (имя) и%» и тел, как «%& trim (tel) и%» и школа, как «%& trim (школа) и%по заказу AD SC
конец, если
Rs.oopen SQL, Conn, 1,1
'Показать результаты поиска
Если rs.eof и rs.bof, тогда
response.write не записывается в адресной книге в настоящее время
еще
делать, пока не rs.eof
Response.write Название: & rs (имя) и тел: & rs (тел) и школа: & rs (школа) и <br>
Rs.movenext
петля
конец, если
'Разбейте базу данных
Установить RS = ничего
Conn.close
установить conn = ничего
%>
При понимании вышеуказанных процедур сосредоточьтесь на основной части, 8 наборов предложений один за другим соответствует 8 состояниям 3 -х поля поиска один за другим
Название Тель -школа
Пустой
Пустой и пустой
Пустой и пустой
Пустой не -импутный не -импутный
Неэмпти
Неэмптино -импутный
Неэмптино -импутный
Не -темптический не -импутный не -импутный
Кроме того, trim () является функцией VB, удалите пространство до и после входной строки;% -много -характерный проход языка SQL (_ -это один символ), который показывает, что%& trim () &%Ввод в поле поиска. Ключевые слова сопоставлены слева и правой;
Давайте посмотрим на метод прогресса.
«Ядро метода поиска, условие суждения пусто
SQL = SELECT * из адреса, где
Если имя <> тогда
SQL = SQL & Имя как '%& name &%'
Флаг = 1
конец, если
Если Tel <> и flag = 1
SQL = SQL & и Tel Like '%& Tel &%'
Флаг = 1
Elseif тел <> тогда
SQL = SQL & TEL Like '%& Tel &%'
Флаг = 1
конец, если
Если компания <> и flag = 1, тогда
SQL = SQL & и компания, как '%& Company &%'
Флаг = 1
Elseif Company <> тогда
SQL = SQL & Company Like '%& Company &%'
Флаг = 1
конец, если
Если флаг = 0, тогда
SQL = SELECT * OF ADDREAR ORDER от ID ASC
конец, если
Rs.oopen SQL, Conn, 1,1
Метод прогресса представляет собой мудрый алгоритм, который можно увидеть в одиночку по длине заявления. Сложность и сущность этого алгоритма заключается в флаге и. Прежде всего, вы должны быть чистыми, а в SQL - символ строкового соединения, сшивая символы вокруг символа. Вернемся к программе, когда имя не пустое, SQL = SELECT * Из адреса, где имя, как '%& name &%', одновременно flag = 1; Tel <> и and of when flag = 1, sql = select * из адреса, где имя, например, «%& name &%» и тел, как «%& tel &%», одновременно, в противном случае, когда имя пустое, SQL = SELECT * из адреса w здесь, как '%& tel &%' В то же время флаг = 1; и так далее. Конечно, когда условия пусты, то есть flag = 0 выберет все элементы в таблице.
3 проверять:
На этом этапе установлена поисковая система. Вот несколько примеров использования:
Имя: Чжан Тел: Школа: кнопка поиска
Результаты поиска:
Название: Zhang San Tel: 333333333 Блок: Компьютерный факультет Университета электронных наук и техники
Имя: Тел: Школа: Кнопка поиска в университете
Результаты поиска:
Название: Zhang San Tel: 333333333 Блок: Компьютерный факультет Университета электронных наук и техники
Имя Li Si Tel: 444444444 Блок: Биологический факультет Сычуаньского университета
Название: Wang Er Тел: 22222222 Блок: Департамент архитектуры, Университет Юго -Западного Цзиотонга
Имя: Тел: 4444 Школа: кнопка поиска в Сычуань
Результаты поиска:
Имя Li Si Tel: 444444444 Блок: Биологический факультет Сычуаньского университета
Имя: Телефон: Школа: Кнопка поиска.
Результаты поиска:
Название: Wang Er Тел: 22222222 Блок: Департамент архитектуры, Университет Юго -Западного Цзиотонга
4 улучшать:
На самом деле, этот двигатель все еще имеет некоторые дефекты. С одной стороны, это потому, что люди обычно используют*в качестве канала, а с другой стороны, если он появляется в гиперссылке, он будет съеден при получении его через запрос следующим образом:
-test.htm--
Коситель
<A href = test.asp?
Коситель
-test.asp--
<%
Контент = запрос (контент)
response.write content
%>
Когда вы просматриваете Test.htm в IE, нажмите на гиперссылку, и она отображается как:
тестесина
Можно видеть, что%игнорируется непосредственно гиперссылкой. Как мы можем решить эту проблему? Это очень просто, давайте сделаем маленькие балки рук и ног и меняющиеся столбцы.
Добавьте следующий код перед ядром поиска:
Имя = заменить (имя,*,%)
TEL = Заменить (Тел,*,%)
Компания = Заменить (Компания,*,%)
Добавьте следующий код в ядро поиска:
Имя = заменить (имя,%,*)
Тел = заменить (Тел,%,*)
Компания = Заменить (Компания,%,*)
Давайте проанализируем эти предложения. Reply () - это функция замены строки в VB. Другими словами, мы заменили все три условия трех условий на%, так что первые три предложения будут изменены на*. Последние 3 предложения могут предотвратить съедение%. Все проблемы будут решены.
Имя: Телефон: Школа: Кнопка поиска.
Результаты поиска:
Название: Wang Er Тел: 22222222 Блок: Департамент архитектуры, Университет Юго -Западного Цзиотонга
Измените приведенные выше операторы и замените*на пустую сеть.
Дополнительная функция: если мы хотим запрашивать заголовок и содержание в одной таблице, но хотим организовать их в порядке этих двух, например, выяснить первый дисплей, который соответствует заголовку, как его можно реализовать за названием? Пересечение
SQL = SELECT * из продукта, где такая такая, как '%& Keyword &%'
SQL = SQL + UNION SELECT * из продукта, где контент, такой как '%& Keyword &%' Порядок по id desc
Добавьте одну в середине двух операторов SQL, и Union может быть запрограммирован в комбинации, но столбец должен быть одинаковым, а также есть один.
Мы будем использовать совместные запросы Union, которые достигнут вышеуказанных функций.
Анализ: запрос базы данных будет запрашиваться в соответствии с данными с заголовком, а затем реализация запроса данных контента будет разделена.