بيئة الجري: IIS
لغة البرنامج النصي: VBScript
قاعدة البيانات: Access/SQL Server
لغة قاعدة البيانات: SQL
1. ملخص:
بغض النظر عن مواقع الويب الديناميكية مثل المنتدى أو نظام الأخبار أو نظام التنزيل ، فغالبًا ما يرى الجميع وظيفة البحث: منشورات البحث ، ومستخدمي البحث ، وبرامج البحث (في كلمات البحث القصيرة) ، وما إلى ذلك. تقدم هذه المقالة كيفية إنشاء كفاءة فعالة الكفاءة العملية ، ابحث عن البحث متعدد القيمة استنادًا إلى ASP.
تواجه هذه المقالة شروطًا متعددة وبحث مطابق غامض ، والذي يفهم شرطًا متعدد ، والبحث في حالة واحدة ليس قطعة من الكعكة. بشكل عام ، هناك طريقتان للبحث عن شروط متعددة: التعداد والأساليب التقدمية. حالة البحث ليست طويلة جدًا (n <= 3) ، ويمكن استخدام طريقة التعداد. من الواضح ، عند زيادة الظروف ، يجب اعتماد طريقة التقدم في كلا الإجراءين ويمكن تحقيقها. تجدر الإشارة إلى أن طريقة التعداد بسيطة للغاية ، سواء كانت حالة الحكم فارغة ، ثم تم البحث عنها وفقًا للشروط غير الفاتحة. مع العديد من الظروف (أعتقد أن لا أحد يذهب إلى هذا النوع من الأشياء في 4 شروط ، يجب علينا بالفعل كتابة 16 مجموعة من الجمل) ؛ هذا هو استخدام موضع الشعار (العلم) ، والثاني هو استخدام السلسلة في اتصال سلسلة SQL. دعونا نوضح إنشاء المحرك بالقدوة.
2. مثال:
لقد أنشأنا محرك استعلام دفتر العناوين.
معرف اسم Tel School
1 ثلاثة 333333333 جامعة العلوم والتكنولوجيا الإلكترونية جامعة العلوم والتكنولوجيا الإلكترونية
2 لي 44444444 قسم الأحياء بجامعة سيتشوان
3 Wang 22222222 Southwest Jiaotong قسم الهندسة المعمارية
... ... ... ...
واجهة بحث الويب هي كما يلي:
الاسم: هاتف: مدرسة: زر البحث
الإجراء المصدر لطريقة التعداد هو كما يلي:
<٪@ codepage = 936 ٪>
قاعدة بيانات الاتصال
<٪
قاتمة كون
قاتمة dboath
قاتمة روبية
قاتمة SQL
تعيين conn = server.createBject (adodb.connection)
DBPath = server.mappath (addressbook.mdb)
Conn.Open Driver = {Microsoft Access Driver (*.mdb)} ؛
تعيين rs = server.createObject (adodb.oldset)
احصل على الاسم والهاتف وقيمة المدرسة من صفحة الويب
الاسم الخافت
Dim Tel
ديم شول
الاسم = الطلب (الاسم)
Tel = request (Tel)
المدرسة = طلب (مدرسة)
"جوهر طريقة التعداد ، نظرًا لوجود 3 شروط ، تحتاج إلى كتابة 8 مجموعات من بيانات الحكم
إذا كان القطع (الاسم) = و trim (tel) = و trim (School) = إذن
SQL = حدد * من ترتيب العنوان بواسطة ID ASC
إنهاء إذا
إذا كان القطع (الاسم) = و trim (tel) = و trim (School) <> ثم
SQL = SELECT * من العنوان الذي مثل المدرسة مثل "٪ & trim (School) و ٪ Order by Id ASC
إنهاء إذا
إذا كان القطع (الاسم) = و trim (tel) <> و trim (School) = إذن
SQL = SELECT * من العنوان الذي يعجبه TEL "٪ & trim (tel) & ٪" بواسطة ID ASC
إنهاء إذا
إذا كان القطع (الاسم) = و trim (tel) <> و trim (School) <> ثم
SQL = SELECT * من العنوان الذي يعجبه TEL "٪ & trim (tel) و ٪" والمدرسة مثل "٪ & trim (School) و ٪ Order by id ASC
إنهاء إذا
إذا كان القطع (الاسم) <> و trim (tel) = و trim (School) = إذن
SQL = SELECT * من العنوان حيث الاسم مثل "٪ & trim (name) & ٪" بواسطة ID ASC
إنهاء إذا
إذا كان القطع (الاسم) <> و trim (tel) = و trim (School) <> ثم
SQL = SELECT * من العنوان حيث الاسم مثل "٪ & trim (name) و ٪" والمدرسة مثل "٪ & trim (School) و ٪".
إنهاء إذا
إذا كان القطع (الاسم) <> و trim (tel) <> و trim (School) = إذن
SQL = SELECT * من العنوان حيث الاسم مثل "٪ & trim (name) & ٪" و Tel Like "٪ & trim (tel) و ٪" أمر بواسطة ID ASC
إنهاء إذا
إذا كان القطع (الاسم) <> و trim (tel) <> و trim (School) <> ثم
SQL = SELECT * من العنوان حيث الاسم مثل "٪ & trim (name) & ٪" و Tel Like "٪ & trim (tel) & ٪" و School Like "٪ & Trim (School) و ٪ Order by AD SC
إنهاء إذا
Rs.OOPEN SQL ، CONN ، 1،1
تظهر نتائج البحث
إذا كان rs.eof و rs.bof ثم
Response.write لا يسجل في دفتر العناوين حاليًا
آخر
افعل بينما لا rs.eof
Response.write اسم:
Rs.Movenext
حلقة
إنهاء إذا
"كسر قاعدة البيانات
تعيين روبية = لا شيء
conn.close
تعيين conn = لا شيء
٪>
عند فهم الإجراءات المذكورة أعلاه ، ركز على الجزء الأساسي ، 8 مجموعات من الجمل واحدة تلو الأخرى المقابلة للحالات 8 من مربعات البحث 3 تلو الأخرى
اسم مدرسة Tel
فارغ
فارغة وفارغة
فارغة وفارغة
فارغة غير فارغة غير فارغة
غير فارغ
غير فارغ غير فارغ
غير فارغ غير فارغ
غير فارغ غير فارغ
بالإضافة إلى ذلك ، TRIM () هي وظيفة VB ، قم بإزالة المساحة قبل وبعد سلسلة الإدخال ؛ ٪ هو مرور متعدد الأشرطة للغة SQL (_ هو ممر واحد) ، مما يدل على أن ٪ & trim () & ٪ إدخال في مربع البحث تتم مطابقة الكلمات الرئيسية مع اليسار واليمين ؛
دعنا نلقي نظرة على طريقة التقدم.
"جوهر طريقة البحث ، وشرط الحكم فارغ ، وسيضيفه غير الفافق إلى حالة البحث
SQL = حدد * من العنوان حيث
إذا كان الاسم <> ثم
SQL = SQL واسم مثل "٪ & name & ٪"
العلم = 1
إنهاء إذا
إذا كان tel <> و flag = 1
SQL = SQL & و Tel Like "٪ & Tel & ٪"
العلم = 1
elseif tel <> ثم
SQL = SQL & Tel Like "٪ & Tel & ٪"
العلم = 1
إنهاء إذا
إذا كانت الشركة <> و Flag = 1 ثم
SQL = SQL & and Company Like '٪ & Company & ٪'
العلم = 1
شركة elseif <> ثم
SQL = SQL & Company مثل "٪ & Company & ٪"
العلم = 1
إنهاء إذا
إذا كان العلم = 0 ثم
SQL = حدد * من ترتيب العنوان بواسطة ID ASC
إنهاء إذا
Rs.OOPEN SQL ، CONN ، 1،1
طريقة التقدم هي خوارزمية حكيمة ، والتي يمكن رؤيتها بمفردها من طول البيان. تكمن صعوبة وجوهر هذه الخوارزمية على العلم و &. بادئ ذي بدء ، يجب أن تكون واضحًا وفي SQL هو رمز اتصال سلسلة ، ويخضع الأحرف حول الرمز معًا. العودة إلى البرنامج ، عندما لا يكون الاسم فارغًا ، SQL = SELECT * من العنوان حيث اسم "٪ & name & ٪" في وقت واحد = 1 ؛ tel <> و whin ar in flag = 1 ، sql = select * من العنوان حيث اسم مثل "٪ & name & ٪ 'و Tel Like" ٪ & Tel & ٪ "في نفس الوقت ، وإلا عندما يكون الاسم فارغًا ، SQL = SELECT * من العنوان W هنا مثل "٪ & tel & ٪" في نفس الوقت العلم = 1 ؛ بالطبع ، عندما تكون الشروط فارغة ، أي العلم = 0 سيحدد جميع العناصر الموجودة في الجدول.
3. يؤكد:
في هذه المرحلة ، يتم إنشاء محرك البحث. فيما يلي بعض الأمثلة على الاستخدام:
الاسم: Zhang Tel: School: زر البحث
نتائج البحث هي:
الاسم: Zhang San Tel: 33333333 الوحدة: قسم الكمبيوتر بجامعة العلوم والتكنولوجيا الإلكترونية
الاسم: هاتف: المدرسة: زر البحث الجامعي
نتائج البحث هي:
الاسم: Zhang San Tel: 33333333 الوحدة: قسم الكمبيوتر بجامعة العلوم والتكنولوجيا الإلكترونية
اسم Li Si Tel: 4444444 الوحدة: قسم الأحياء بجامعة سيتشوان
الاسم: Wang Er Tel: 2222222 الوحدة: قسم الهندسة المعمارية ، جامعة جنوب غرب Jiaotong
الاسم: هاتف: 4444 المدرسة: زر البحث Sichuan
نتائج البحث هي:
اسم Li Si Tel: 4444444 الوحدة: قسم الأحياء بجامعة سيتشوان
الاسم: الهاتف: المدرسة: زر البحث ٪
نتائج البحث هي:
الاسم: Wang Er Tel: 2222222 الوحدة: قسم الهندسة المعمارية ، جامعة جنوب غرب Jiaotong
4. يحسن:
في الواقع ، لا يزال هذا المحرك لديه بعض العيوب. من ناحية ، فذلك لأن الأشخاص يستخدمون عادة*كقناة ، ومن ناحية أخرى ، إذا ظهر في الارتباط التشعبي ، فسيتم تناوله عند الحصول عليه من خلال الطلب ، على النحو التالي:
-test.htm--
القص
<a href = test.asp؟
القص
-الاختبار
<٪
المحتوى = طلب (محتوى)
استجابة. المحتوى
٪>
عندما تتصفح test.htm في IE ، انقر فوق الارتباط التشعبي ، ويتم عرضه على النحو التالي:
TestTheSign
يمكن ملاحظة أن ٪ يتم تجاهلها مباشرة بواسطة الارتباط التشعبي. كيف يمكننا حل هذه المشكلة؟ الأمر بسيط للغاية ، دعنا نفعل القليل من العوارض والسرقة اليدوية والأعمدة المتغيرة.
أضف الرمز التالي قبل Search Core:
الاسم = استبدال (الاسم ،*، ٪)
Tel = استبدال (Tel ،*، ٪)
الشركة = استبدال (الشركة ،*، ٪)
أضف الرمز التالي إلى قلب البحث:
الاسم = استبدال (الاسم ، ٪ ،*)
Tel = استبدال (Tel ، ٪ ،*)
الشركة = استبدال (الشركة ، ٪ ،*)
دعونا نحلل هذه الجمل. استبدال () هي وظيفة استبدال السلسلة في VB. بمعنى آخر ، استبدلنا جميع الشروط الثلاثة للشروط الثلاثة إلى ٪ ، بحيث يتم تغيير الجمل الثلاث الأولى إلى*. الجمل الثلاث الأخيرة يمكن أن تمنع ٪ من تناول الطعام. سيتم حل جميع المشاكل.
الاسم: الهاتف: المدرسة: زر البحث ٪
نتائج البحث هي:
الاسم: Wang Er Tel: 2222222 الوحدة: قسم الهندسة المعمارية ، جامعة جنوب غرب Jiaotong
قم بتغيير العبارات المذكورة أعلاه واستبدالها بالشبكة الفارغة.
الوظيفة التكميلية: إذا أردنا الاستعلام عن العنوان والمحتوى في نفس الجدول ، ولكن نريد ترتيبهما بترتيب هذين ، مثل اكتشاف العرض الأول الذي يلبي العنوان ، كيف يمكن تحقيقه وراء العنوان؟ التقاطع
SQL = SELECT * من المنتج حيث TITE مثل "٪ والكلمة الرئيسية و ٪"
SQL = SQL + UNION SELECT * من المنتج حيث يكون محتوى مثل "٪ و Keyword & ٪" من خلال معرف DESC
أضف واحدًا في منتصف بيان SQL ، ويمكن أن يستفسر الاتحاد مجتمعة ، ولكن يجب أن يكون العمود هو نفسه ، وهناك أيضًا واحد.
سوف نستخدم الاستعلامات المشتركة في Union ، والتي ستحقق الوظائف المذكورة أعلاه.
التحليل: سيتم الاستعلام عن استعلام قاعدة البيانات وفقًا للبيانات مع العنوان ، ثم يتم تقسيم تحقيق استعلام البيانات للمحتوى.