摘要:本文主要針對目前網站上常用的查詢系統所存在的某些常見問題而提出了一種新的查詢設計思路,這種新的設計思路主要是在客戶端利用JavaScript腳本語言對用戶設置的查詢條件進行預處理,讓用戶設置的條件以兩種形式出現在系統中,一種形式方便方便用戶閱讀和理解,另一種形式用于真正的數據查詢;此外,通過腳本語言將用戶設置的查詢條件保存于頁面上列表中,用戶可以隨意組合現有的條件形成更為復雜的查詢條件;同時用戶也可以在列表中隨意選擇某個條件執行數據查詢。
關鍵詞:復合查詢;人性化;查詢條件;組合
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)14-20787-02
1 引言
當前網頁上的數據檢索已經成為一個網站必備的功能了,我想每個上過網的人都有過搜索數據的經歷,都希望能通過一個很好的搜索工具盡快盡可能準確地搜索到自己想要的數據。目前網頁上的搜索工具主要是通過提供幾個文本框或者幾個下拉列表,讓用戶在文本框填寫或者在列表中選擇需要尋找的關鍵字,然后系統就按照輸入的幾個條件進行模糊或精確的查找,我們知道這些查找條件之間大部分都是與的關系,而且當查詢條件設置很多的時候,用戶都不知道最終按照哪種條件來查詢的,就連世界知名的搜索引擎GOOGLE都有類似的問題。
但是在實際工作和生活中,我們所需要的查詢條件可能是各種各樣的,可能會有很多條件進行多種不同組合,條件之間可能是與的關系,也可能是或地關系,也可能是非的關系,甚至可能是先或后與、先與后或、先非后與等等。而且很多用戶來說要在某個網站進行多次查詢,每次查詢的條件相似但又不是完全相同,每次查詢用戶都需要重新設置條件,填寫關鍵字,非常不方便。但更重要的是,當查詢次數多了以后,用戶自己都不知道本次查詢結果是按照哪種查詢條件檢索出來的。這些就是目前網站中數據檢索功能存在的一些顯著問題,本文將就這些問題展開討論,從客戶端入手,尋找一種新方法、新思路來實現更加方便、更加人性化的數據檢索。
2 復合查詢所完成的功能及實現思路
本文所提出的復合查詢主要是從客戶端入手,通過改善查詢界面、查詢條件的形成來提高網站查詢的實用性和高效性。這種復合查詢主要通過在客戶端利用JavaScript腳本語言結合表單形成各種復雜的查詢條件,而且將用戶每次形成的條件以通俗易懂的形式保存在一個列表中,用戶可以隨意添加、刪除以及組合這些條件,然后可以從列表中隨意選取某個條件送往服務器執行數據查詢,返回自己想要的結果。本查詢系統主要的特色功能在于:
(1)可以對數據記錄中的任一字段進行檢索;
(2)可以以任意方式組合各種條件,如條件的非、條件之間的與或關系等;
(3)可以將用戶形成的條件保存起來,當需要用到相似的條件時,勿須重復去設置;
(4)條件列表中保存的查詢條件完全是人性化的、通俗易懂的。這些條件與真正用于查詢的條件采用不同的形成方式,有著不同的表現形式,這些條件讓用戶一看就明白這些查詢條件的涵義。如:在某條新聞內容中模糊查找“考試”這個詞時,則在條件列表中保存的條件就是:新聞內容 相似于 “考試”。
3 形成復合查詢條件的具體實現
3.1 界面組成
復合查詢的主界面如圖1。
圖1中上半部分是用于形成條件的,下面的列表框是用于保存各種條件的。“查詢字段”、“查詢關系”和“查詢值”用于形成一個簡單的查詢條件;其中“查詢字段”是一下拉列表,其中列出可能用于查詢的各個字段,這些字段是利用腳本從數據庫中讀取出來的,當數據庫中數據字段發生改變時,這里也將保持同步,用戶可以根據自己的需要從中選取不同的字段進行查詢;“查詢關系”根據用戶選取不同的字段,有不同的表現形式,如用戶選擇日期型數據,則用戶還可以進一步選擇是按年還是按月來查詢;“查詢值”是一文本框,可以讓用戶輸入查詢關鍵字。“組合關系”也是一下拉列表,其中列出三種基本的邏輯關系與或非,通過這個列表可以任意組合保存在條件列表中的各條件,以形成復雜的查詢條件,而且可以進行多次不同邏輯關系的組合。如先對兩條件進行與關系組合形成一條件,然后可再將此條件與另一條件進行或關系組合等等。
3.2 單查詢條件的形成
查詢條件的形成其實也很簡單,根據用戶的選擇和設置,采用兩套不同的方案形成兩套條件,一套條件是用比較人性化的自然語言別寫出來的,它們都顯示在條件列表中,比較適合于普通用戶閱讀和理解;另外一套則是按照數據庫查詢語句的語法編寫的條件,用于傳送到服務器端,實現真正的數據查詢。本文主要是通過客戶端腳本來實現兩套條件的形成的,程序根據用戶選取字段類型的不同,分別進行不同處理。
因完整代碼太長,此處列舉部分代碼以說明其實現思路,下面是當選擇了字符串型字段時的處理程序:
case \"string\":
{if(blur_flag.checked(!blur_flag.disabled))//判斷是否選中了模糊查詢復選框
{t=txt+\"相似于'\"+vle+\"'\"; //用于形成人性化條件
v=fld+\" like '%\"+vle+\"%'\"; //用于形成真正的查詢條件}
else
{t=txt+opt+\"'\"+vle+\"'\";
v=fld+opt+\"'\"+vle+\"'\";
}break;}
如當我們需要查找新聞內容中包含“畢業生”時,本程序可以形成兩個條件:一是新聞內容相似于“畢業生”,此條件用于顯示在條件列表中;另一個是news_content like '%畢業生%',此條件用于真正的數據查詢。
當選擇其它類型的字段,其處理思路是類似的,只不過對于某些具體類型的字段,可根據實際情況不同做相應的改變和調整即可。當查詢條件形成后,人性化條件條件到條件列表中,而真正的查詢條件以參數的形式傳送到服務器端實現數據查詢。如圖2是添加了若干個單查詢條件后條件列表的情況。
3.3 組合查詢條件的形成
可以任意組合查詢條件是本查詢系統的另外一大特色。要實現查詢條件的任意組合也可以通過客戶端腳本代碼來實現,其基本思路是:首先在條件列表中選擇需要組合的兩個查詢條件,然后從組合關系下拉列表中再選取組合關系,這要就可以按照指定的組合關系去形成更為復雜的條件了,同時將形成的新條件也添加到條件列表中,從而可隨時給用戶提供查詢條件。以下是實現組合查詢條件的combine_condition函數代碼:
function combine_condition()
{
var rv=document.form1.combine_relation.value;//獲取當前選定的組合關系
var rt=document.form1.combine_relation.options[document.form1.combine_relation.selectedIndex].text; //獲取當前選定的組合關系所對應的文本
var i,j=0,new_v,new_t,s_count=0;
var v=new Array(20);
var t=new Array(20);
for(i=0;i if(document.form1.conditions.options[i].selected) {if(document.form1.conditions.options[i].value==\"all\") { alert(\"所有記錄不能進行任何的組合\"); return; } s_count++; t[j]=document.form1.conditions.options[i].text; v[j]=document.form1.conditions.options[i].value; j++; if(j>2) {alert(\"您所選項目過多!不能實現組合\"); return;}} if((rv==\"and\"||rv==\"or\")s_count==2) //進行兩個查詢條件的求與和求或處理 {new_v=\"(\"+v[0]+\") \"+rv+\" (\"+v[1]+\")\"; new_t=\"(\"+t[0]+\") \"+rt+\" (\"+t[1]+\")\";} else {if(rv==\"not\") //進行查詢條件的求非處理 {if(s_count==1) {new_v=rv+\" (\"+v[0]+\")\"; new_t=rt+\" (\"+t[0]+\")\";} else {alert(\"只能選擇一個條件進行求非!\"); return;}} else {alert(\"請選擇兩個條件進行組合!\"); return;}} document.form1.conditions.add(Option(new_t,new_v)); //將組合的新條件添加到條件列表中} 圖3是添加了幾個組合條件后的條件列表情況。 條件形成后,我們就可以隨意的選取條件列表中的任一條件執行查詢,我們可以看到我們的查詢現在已變得如此方便和清晰,先前設置的查詢條件可以反復利用,不需要重復設置相同或相似的條件,大大提高了我們的工作效率。而且我們對我們的查詢條件一清二楚,只有清楚的查詢條件才能讓我們更快更準確地獲取到我們想要的數據。 4 總結 至此為止,本文提出了一種網頁查詢系統設計的新思路,它提供一個讓用戶自己隨意設置查詢條件的界面,而且可以將用戶設置的條件以人性化的方式列出來,使用戶可以隨心所欲地查詢到任何自己想要的數據,大大提高了查詢的智能性和準確性。雖然這種查詢的功能還不是還完善,還存在一些問題和不足,但它至少提出了一種思路,彌補了當前通用網頁查詢系統所存在的問題。我想通過結合常用的網頁查詢系統和本文所提出的設計思路,我們可以設計出一種更高效、更人性化的查詢系統了,給所有用戶提供一種更加友好方便的查詢操作界面。 參考文獻: [1] 郭海. JavaScript語言參考手冊[M]. 清華大學出版社,2004. [2] 張景峰. ASP程序設計教程[M]. 水利水電出版社,2003. 注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文