실행 환경 : IIS
스크립트 언어 : vbscript
데이터베이스 : Access/SQL Server
데이터베이스 언어 : SQL
1. 요약:
포럼, 뉴스 시스템 또는 다운로드 시스템과 같은 동적 웹 사이트에 관계없이 모든 사람은 종종 검색 기능, 검색 사용자, 검색 소프트웨어 (짧은 검색 키워드) 등을 확인합니다.이 기사는 효율적인 설정을 설정하는 방법을 소개합니다. 효율성 실용적, ASP를 기반으로 다중 값 검색 검색.
이 기사는 여러 조건과 모호한 일치 검색에 직면하고 있으며, 이는 다중 조건을 이해하고 단일 조건 검색은 케이크 조각이 아닙니다. 일반적으로 여러 조건을 검색하는 두 가지 방법이 있습니다 : 열거 및 점진적인 방법. 검색 조건이 너무 길지 않으며 (n <= 3) 열거 방법은 2입니다. 분명히 조건이 증가하면 진행 방법은 두 절차에서 모두 채택되어야하며 달성 할 수 있습니다. 판결 조건이 비어 있는지 여부에 관계없이 열거 방법이 매우 간단하다는 것을 지적해야합니다. 많은 조건으로 (아무도 4 가지 조건에서 이런 종류의 일을하지 않는다고 생각합니다. 우리는 이미 16 개의 문장 세트를 작성해야합니다. 하나는 로고 위치 (플래그)를 사용하는 것이고, 두 번째는 sql 문자열 연결에서 문자열을 사용하는 것입니다. 예제에 따라 엔진의 확립을 설명해 봅시다.
2. 예:
우리는 주소록 쿼리 엔진을 설정했습니다. 데이터베이스는 주소록으로, 테이블은 주소라고하며, 필드는 다음과 같습니다.
신분증 Tel School
1 3 333333333 전자 과학 기술 대학교 전자 과학 기술 대학
2 Li 444444444 사천 대학 생물학과
3 Wang 222222222 Southwest Jiaotong University 건축학과
... ... ... ... ...
웹 검색 인터페이스는 다음과 같습니다.
이름 : 전화 : 학교 : 검색 버튼
열거 방법의 소스 절차는 다음과 같습니다.
< %@ codepage = 936 %>
'연결 데이터베이스
<%
Dim Conn
희미한 dboath
희미한 Rs
희미한 SQL
set conn = server.createobject (adodb.connection)
dbpath = server.mappath (주소 북.mdb)
Conn.open 드라이버 = {Microsoft Access Driver (*.mdb)};
set rs = server.createobject (adodb.oldset)
'웹 페이지에서 이름, 전화, 학교 가치 받기
희미한 이름
Dim Tel
희미한 학사
이름 = 요청 (이름)
전화 = 요청 (전화)
학교 = 요청 (학교)
'열거 방법의 핵심, 3 가지 조건이 있기 때문에 8 개의 IF 판결 진술서를 작성해야합니다.
If trim (name) = 및 trim (tel) = 및 trim (학교) = 그런 다음
sql = select * id asc의 주소 주문
끝 If
trim (name) = 및 trim (tel) = 및 trim (school) <> if
SQL = SELECT *에서 School 's Like'%& Trim (School) 및%주문에 의한 주소
끝 If
If trim (name) = 및 trim (tel) <> 및 trim (학교) = 그런 다음
sql = select *에서 tel like '%& trim (tel) &%'주문에서 id asc의 주소
끝 If
trim (name) = and trim (tel) <> 그리고 trim (school) <> if
SQL = SELECT *에서 * TEL Like '%& Trim (Tel) 및%'및 학교와 같은 학교는 '%& trim (학교) 및 ID ASC와 같은 학교에서 선택합니다.
끝 If
If trim (name) <>이고 trim (tel) = 및 trim (학교) = 그런 다음
sql = select *에서 '%& trim (name) 및%'주문에 의한 이름과 같은 주소에서 id asc.
끝 If
trim (name) <>이고 trim (tel) = and trim (school) <>
SQL = '%& trim (name) &%'및 학교와 같은 학교와 같은 주소에서 '%& trim (school) 및 Id asc와 같은 학교에서 선택 * 선택 *
끝 If
if trim (name) <>이고 trim (tel) <> 그리고 trim (학교) = 그런 다음
sql = select *에서 '%& trim (name) &%'와 같은 이름과 같은 주소에서 '%& trim (tel) &%'주문 asc.
끝 If
if trim (name) <>이고 trim (tel) <> 그리고 trim (school) <>
SQL = SELECT * '%& trim (name) &%'및 '%& trim (tel) &%'와 같은 이름과 같은 주소 및 '%& trim (school) 및 AD SC의 주문
끝 If
Rs.OOPEN SQL, CONN, 1,1
'검색 결과를 보여줍니다
rs.eof와 rs.bof라면
Response.Write는 현재 주소록에 기록되지 않습니다
또 다른
rs.eof가 아니라
답변 이름 : & rs (이름) & 전화 : & rs (전화) & 학교 : & rs (학교) & <br>
rs.movenext
고리
끝 If
'데이터베이스를 깨십시오
RS = 아무것도 설정하지 않습니다
conn.close
Conn = 아무것도 설정하지 않습니다
%>
위의 절차를 이해할 때 3 개의 검색 상자의 8 상태에 해당하는 8 개의 문장 세트 하나의 핵심 부분에 중점을 둡니다.
Tel School의 이름
비어 있는
비어 있고 비어 있습니다
비어 있고 비어 있습니다
비어 비어 비어 비어 비어 있습니다
비어 있지 않습니다
비어 비어 없음
비어 비어 없음
비어 비어 비어 비어 비어 없다
또한 Trim ()는 VB의 함수이며 입력 문자열 전후 공간을 제거합니다.%는 SQL 언어의 다중 문자 통로 (_는 단일 문자 패스)입니다. &%검색 상자 입력 키워드는 왼쪽과 오른쪽과 일치합니다.
열거 방법과 비교하여 진행 방법을 살펴 보겠습니다.
'검색 방법의 핵심, 판단 조건이 비어 있고 비어 있으면 검색 조건에 추가됩니다.
SQL = 주소에서 * 선택 *을 선택하십시오
이름 <>라면
SQL = SQL 및 '%& name &%'와 같은 이름
플래그 = 1
끝 If
tel <> 및 플래그 = 1 인 경우
SQL = SQL & 및 Tel Like '%& Tel &%'
플래그 = 1
그렇다면 elseif tel <>
SQL = SQL & Tel Like '%& Tel &%'
플래그 = 1
끝 If
회사 <> 및 플래그 = 1 인 경우
SQL = SQL & 및 회사와 같은 회사 '%& company &%'
플래그 = 1
그렇다면 elseif company <>
SQL = SQL & Company와 같은 '%& company &%'
플래그 = 1
끝 If
플래그 = 0이면
sql = select * id asc의 주소 주문
끝 If
Rs.OOPEN SQL, CONN, 1,1
진행 방법은 현명한 알고리즘으로, 진술의 길이에서 단독으로 볼 수 있습니다. 이 알고리즘의 어려움과 본질은 플래그와 &에 있습니다. 우선, 당신은 명확해야합니다. SQL은 문자열 연결 기호이며, 기호 주위의 문자를 함께 스티칭합니다. 프로그램으로 돌아가서 이름이 비어 있지 않으면 SQL = SELECT *에서 '%&%&%'와 같은 이름이 비어 있지 않고 TEL이 비어 있지 않으면, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, 즉, tel <> 및 flag = 1, SQL = SELECT * '%& name &%'와 같은 이름과 동시에 '%& tel &%'와 같은 이름이있는 주소에서 이름이 비어있을 때 SQL = 주소 w에서 '%& tel &%'에서 동시에 플래그 = 1; 물론, 조건이 비어있을 때, 즉, 플래그 = 0은 테이블의 모든 항목을 선택합니다.
3. 확인하다:
이 시점에서 검색 엔진이 설정됩니다. 사용의 몇 가지 예는 다음과 같습니다.
이름 : Zhang 전화 : 학교 : 검색 버튼
검색 결과는 다음과 같습니다.
이름 : Zhang San 전화 : 33333333 단위 : 전자 과학 기술 대학의 컴퓨터 부서
이름 : 전화 : 학교 : 대학 검색 버튼
검색 결과는 다음과 같습니다.
이름 : Zhang San 전화 : 33333333 단위 : 전자 과학 기술 대학의 컴퓨터 부서
이름 Li Si 전화 : 44444444 단위 : Sichuan University Biology Department
이름 : Wang Er 전화 : 22222222 단위 : Southwest Jiaotong University의 건축학과
이름 : 전화 : 4444 학교 : 사천 검색 버튼
검색 결과는 다음과 같습니다.
이름 Li Si 전화 : 44444444 단위 : Sichuan University Biology Department
이름 : 전화 : 학교 : 급여%검색 버튼
검색 결과는 다음과 같습니다.
이름 : Wang Er 전화 : 22222222 단위 : Southwest Jiaotong University의 건축학과
4. 개선하다:
실제로이 엔진에는 여전히 문제가 발생합니다. 한편으로, 사람들은 일반적으로*채널로*사용하기 때문에, 다른 한편으로는 하이퍼 링크에 나타나면 다음과 같이 요청을 통해 얻을 때 먹을 것입니다.
-test.htm-
보리 베기
<a href = test.asp?
보리 베기
-test.asp-
<%
내용 = 요청 (콘텐츠)
응답. 내용을 작성하십시오
%>
IE에서 Test.htm을 탐색하면 하이퍼 링크를 클릭하면 다음과 같이 표시됩니다.
TestTheSign
하이퍼 링크에 의해%가 직접적으로 무시된다는 것을 알 수 있습니다. 이 문제를 어떻게 해결할 수 있습니까? 매우 간단합니다. 약간의 손과 발을 훔치는 빔과 컬럼을 변경합시다.
검색 코어 전에 다음 코드를 추가하십시오.
이름 = 교체 (이름,*,%)
전화 = 교체 (tel,*,%)
회사 = 교체 (회사,*,%)
검색의 핵심에 다음 코드를 추가하십시오.
name = replace (이름,%,*)
전화 = 교체 (전화,%,*)
회사 = 교체 (회사,%,*)
이 문장을 분석합시다. 대체 ()는 vb의 문자열 교체 함수입니다 (이름,*,%)는 모든 이름을%로 바꾸는 것입니다. 다시 말해, 우리는 세 가지 조건의 세 가지 조건을 모두%로 교체하여 처음 세 문장이*로 변경됩니다. 마지막 3 문장은%가 먹는 것을 방지 할 수 있습니다. 모든 문제가 해결됩니다.
이름 : 전화 : 학교 : 급여%검색 버튼
검색 결과는 다음과 같습니다.
이름 : Wang Er 전화 : 22222222 단위 : Southwest Jiaotong University의 건축학과
위의 진술을 변경하고*빈 그리드로 교체하십시오. Google과 Baidu에서 자주 사용하는 공간을 사용하는 검색 엔진이 아닌가?
보충 기능 : 제목과 내용을 같은 테이블에서 쿼리하려면 제목을 충족하는 첫 번째 디스플레이를 찾는 등이 두 가지의 순서대로 정렬하려면 제목 뒤에서 어떻게 실현 될 수 있습니까? 교차로
SQL = SELECT * '%및 키워드 &%'와 같은 제품에서
SQL = SQL + UNION SELECT *에서 '%& keyword &%'Order의 컨텐츠에서 id desc
두 SQL 문의 중간에 하나를 추가하면 Union이 조합하여 문의 할 수 있지만 열은 동일해야하며 하나도 있습니다.
우리는 Union의 공동 쿼리를 사용하여 위의 기능을 달성 할 것입니다.
분석 : 데이터베이스 쿼리는 제목이있는 데이터에 따라 쿼리되므로 컨텐츠의 데이터 쿼리 실현이 나뉩니다.