Lingkungan menjalankan: IIS
Bahasa skrip: vbscript
Database: Access/SQL Server
Bahasa Database: SQL
1. ringkasan:
Terlepas dari situs web dinamis seperti forum, sistem berita, atau sistem unduhan, semua orang sering melihat fungsi pencarian: Posting pencarian, pengguna pencarian, perangkat lunak pencarian (dalam kata kunci pencarian pendek), dll. Artikel ini memperkenalkan cara membuat efisien yang efisien Efisiensi Praktis, Cari pencarian multi -nilai berdasarkan ASP.
Artikel ini menghadapi berbagai kondisi dan pencarian pencocokan yang tidak jelas, yang memahami multi -kondisi, dan pencarian kondisi tunggal bukan sepotong kue. Secara umum, ada dua cara untuk mencari banyak kondisi: pencacahan dan metode progresif. Kondisi pencarian tidak terlalu lama (n <= 3), dan metode enumerasi dapat digunakan. Jelas, ketika kondisinya meningkat, metode kemajuan harus diadopsi di kedua prosedur dan dapat dicapai. Harus ditunjukkan bahwa metode enumerasi sangat sederhana, apakah kondisi penilaian kosong, dan kemudian dicari sesuai dengan kondisi yang tidak kosong. Dengan banyak kondisi (saya percaya tidak ada yang melakukan hal semacam ini dalam 4 kondisi, kita sudah harus menulis 16 set kalimat); Yang satu itu adalah menggunakan posisi logo (flag), dan yang kedua adalah menggunakan string dalam koneksi koneksi string SQL. Mari kita jelaskan pendirian mesin dengan contoh.
2. Contoh:
Kami telah membuat mesin kueri buku alamat.
ID Name Tel School
1 Tiga 333333333 Universitas Sains dan Teknologi Elektronik Universitas Sains dan Teknologi Elektronik
2 Li 444444444 Departemen Biologi Universitas Sichuan
3 Wang 22222222 Departemen Arsitektur Universitas Jiaotong Barat Daya
... ... ... ...
Antarmuka pencarian web adalah sebagai berikut:
Nama: Telp: Sekolah: Tombol Pencarian
Prosedur sumber metode enumerasi adalah sebagai berikut:
< %@ Codepage = 936 %>
'Database Koneksi
<%
redup conn
redup dboath
Redup
redup SQL
Set Conn = Server.CreateObject (AdodB.Connection)
Dbpath = server.mappath (addressbook.mdb)
conn.open driver = {Microsoft Access Driver (*.mdb)};
Set RS = Server.CreateObject (ADODB.OLDSET)
'Dapatkan nama, telepon, nilai sekolah dari halaman web
nama redup
Redup tel
Redup schol
Name = request (name)
Tel = Request (Tel)
Sekolah = permintaan (sekolah)
'Inti dari metode enumerasi, karena ada 3 kondisi, Anda perlu menulis 8 kelompok jika pernyataan penilaian
Jika trim (name) = dan trim (tel) = dan trim (sekolah) = lalu
SQL = Pilih * Dari Pesanan Alamat oleh ID ASC
akhiri jika
Jika trim (name) = dan trim (tel) = dan trim (sekolah) <>
SQL = Pilih * Dari Alamat Di mana Sekolah Seperti '%& Trim (Sekolah) &%Pesanan oleh ID ASC
akhiri jika
Jika trim (name) = dan trim (tel) <> dan trim (sekolah) = lalu
SQL = SELECT * DARI ALAMAT DI MANA TEL LIKE '%& TRIM (TEL) &%' PESANAN OLEH ID ASC
akhiri jika
Jika trim (name) = dan trim (tel) <> dan trim (sekolah) <>
SQL = SELECT * DARI ALAMAT DI MANA TEL LIKE '%& TRIM (TEL) &%' dan sekolah seperti '%& trim (sekolah) &%pesanan oleh ID ASC
akhiri jika
Jika trim (name) <> dan trim (tel) = dan trim (sekolah) = lalu
SQL = SELECT * Dari Alamat Di Mana Nama Seperti '%& Trim (Nama) &%' Pesanan oleh ID ASC
akhiri jika
Jika trim (name) <> dan trim (tel) = dan trim (sekolah) <>
Sql = pilih * dari alamat di mana nama seperti '%& trim (name) &%' dan sekolah seperti '%& trim (sekolah) &%' pesanan oleh id asc
akhiri jika
Jika trim (name) <> dan trim (tel) <> dan trim (sekolah) = lalu
SQL = SELECT * Dari alamat di mana nama seperti '%& trim (name) &%' dan tel like '%& trim (tel) &%' pesanan oleh id asc
akhiri jika
Jika trim (name) <> dan trim (tel) <> dan trim (sekolah) <> lalu
SQL = SELECT * Dari alamat di mana nama seperti '%& trim (name) &%' dan tel like '%& trim (tel) &%' dan sekolah seperti '%& trim (sekolah) &%pesanan oleh ad sc
akhiri jika
Rs.oopen Sql, Conn, 1,1
'Tunjukkan hasil pencarian
Jika rs.eof dan rs.bof maka
response.write tidak mencatat dalam buku alamat saat ini
kalau tidak
lakukan sementara tidak rs.eof
Response.Write Name: & Rs (Name) & Tel: & Rs (Tel) & Sekolah: & RS (sekolah) & <br>
rs.movenext
lingkaran
akhiri jika
'Hancurkan database
Setel RS = Tidak Ada
Conn.Close
Setel Conn = Tidak Ada
%>
Saat memahami prosedur di atas, fokuslah pada bagian inti, 8 set kalimat satu per satu sesuai dengan 8 negara bagian dari 3 kotak pencarian satu per satu
Nama sekolah tel
Kosong
Kosong dan kosong
Kosong dan kosong
Kosong non -pty non -empt
Non -empty
Non -pty non -empty
Non -pty non -empty
Non -pty non -empt non -empty
Selain itu, trim () adalah fungsi dari VB, lepaskan ruang sebelum dan sesudah string input;%adalah bagian multi -karakter dari bahasa SQL (_ adalah pass karakter tunggal), yang menunjukkan bahwa%& trim () &%input dalam input kotak pencarian Kata kunci dicocokkan dengan kiri dan kanan;
Mari kita lihat metode kemajuan.
'Inti dari metode pencarian, kondisi penilaian kosong, dan yang tidak ada akan menambahkannya ke kondisi pencarian
Sql = pilih * dari alamat dimana
Jika nama <> lalu
Sql = sql & name like '%& name &%'
Bendera = 1
akhiri jika
Jika tel <> dan bendera = 1
Sql = sql & dan tel like '%& tel &%'
Bendera = 1
Elseif tel <> lalu
Sql = sql & tel like '%& tel &%'
Bendera = 1
akhiri jika
Jika perusahaan <> dan bendera = 1 maka
Sql = sql & dan perusahaan seperti '%& perusahaan &%'
Bendera = 1
elseif perusahaan <> lalu
Sql = sql & perusahaan seperti '%& perusahaan &%'
Bendera = 1
akhiri jika
Jika bendera = 0 lalu
SQL = Pilih * Dari Pesanan Alamat oleh ID ASC
akhiri jika
Rs.oopen Sql, Conn, 1,1
Metode kemajuan adalah algoritma yang bijak, yang dapat dilihat sendirian dari panjang pernyataan. Kesulitan dan esensi dari algoritma ini terletak pada bendera dan &. Pertama -tama, Anda harus jelas & di SQL adalah simbol koneksi string, menjahit karakter di sekitar simbol bersama -sama. Kembali ke program, saat namanya tidak kosong, SQL = SELECT * Dari alamat di mana nama seperti '%& name &%' secara bersamaan flag = 1; Tel <> dan dan kapan flag = 1, sql = pilih * dari alamat di mana nama seperti '%& name &%' dan tel like '%& tel &%' secara bersamaan, jika tidak saat namanya kosong, SQL = Pilih * dari alamat W di sini seperti '%& tel &%' pada waktu yang sama bendera = 1; dan sebagainya. Tentu saja, ketika kondisinya kosong, yaitu, flag = 0 akan memilih semua item dalam tabel.
3. memeriksa:
Pada titik ini, mesin pencari didirikan. Berikut adalah beberapa contoh penggunaan:
Nama: Zhang Telp: Sekolah: Tombol Pencarian
Hasil pencariannya adalah:
Nama: Zhang San Telp: 33333333 Unit: Departemen Komputer Universitas Sains dan Teknologi Universitas Elektronik
Nama: Telp: Sekolah: Tombol Pencarian Universitas
Hasil pencariannya adalah:
Nama: Zhang San Telp: 33333333 Unit: Departemen Komputer Universitas Sains dan Teknologi Universitas Elektronik
Nama Li Si Telp: 44444444 Unit: Departemen Biologi Universitas Sichuan
Nama: Wang er Telp: 22222222 Unit: Departemen Arsitektur, Universitas Jiaotong Barat Daya
Nama: Telp: 4444 Sekolah: Tombol Pencarian Sichuan
Hasil pencariannya adalah:
Nama Li Si Telp: 44444444 Unit: Departemen Biologi Universitas Sichuan
Nama: Telepon: Sekolah: Tombol Pencarian%
Hasil pencariannya adalah:
Nama: Wang er Telp: 22222222 Unit: Departemen Arsitektur, Universitas Jiaotong Barat Daya
4. memperbaiki:
Bahkan, mesin ini masih memiliki beberapa cacat. Di satu sisi, itu karena orang biasanya menggunakan*sebagai saluran, dan di sisi lain, jika muncul di hyperlink, itu akan dimakan saat mendapatkannya melalui permintaan, sebagai berikut:
---Test.htm--
Memotong
<A href = test.asp?
Memotong
---Test.asp--
<%
konten = permintaan (konten)
Response.write konten
%>
Saat Anda menelusuri tes.htm di IE, klik hyperlink, dan ditampilkan sebagai:
TestThesign
Dapat dilihat bahwa%diabaikan secara langsung oleh hyperlink. Bagaimana kita bisa menyelesaikan masalah ini? Ini sangat sederhana, mari kita lakukan balok kecil dan mencuri kaki dan mengganti kolom.
Tambahkan kode berikut sebelum inti pencarian:
Name = ganti (name,*,%)
Tel = ganti (tel,*,%)
Perusahaan = ganti (perusahaan,*,%)
Tambahkan kode berikut ke inti pencarian:
Name = ganti (name,%,*)
Tel = ganti (tel,%,*)
Perusahaan = Ganti (Perusahaan,%,*)
Mari kita analisis kalimat -kalimat ini. Ganti () adalah fungsi penggantian string di VB. Dengan kata lain, kami mengganti ketiga kondisi dari tiga kondisi menjadi%, sehingga tiga kalimat pertama akan diubah menjadi*. 3 kalimat terakhir dapat mencegah%dimakan. Semua masalah akan diselesaikan.
Nama: Telepon: Sekolah: Tombol Pencarian%
Hasil pencariannya adalah:
Nama: Wang er Telp: 22222222 Unit: Departemen Arsitektur, Universitas Jiaotong Barat Daya
Ubah pernyataan di atas dan ganti*dengan kisi -kisi kosong.
Fungsi Tambahan: Jika kita ingin menanyakan judul dan konten di tabel yang sama, tetapi ingin mengaturnya dalam urutan keduanya, seperti mencari tahu tampilan pertama yang memenuhi judul, bagaimana bisa direalisasikan di balik judul? Persimpangan
Sql = pilih * dari produk di mana tite seperti '%& kata kunci &%'
SQL = SQL + Union SELECT * Dari produk di mana konten seperti '%& kata kunci &%' pesanan oleh id desc
Tambahkan satu di tengah dua pernyataan SQL, dan Union dapat menanyakan dalam kombinasi, tetapi kolom harus sama, dan ada juga satu.
Kami akan menggunakan kueri bersama Union, yang akan mencapai fungsi di atas.
Analisis: Kueri basis data akan ditanyakan sesuai dengan data dengan judul, dan kemudian realisasi permintaan data dari konten karenanya dibagi.