| 
			
				|  | VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 |  
 
	
		| 上一篇主題 :: 下一篇主題 |  
		| 發表人 | 內容 |  
		| Ruey 
 
 
 註冊時間: 2003-03-12
 文章: 1698
 來自: tunglo
 
 第 1 樓
 
 | 
			
				|  發表於: 星期日 五月 11, 2003 3:06 pm    文章主題: PHP全文檢索示範(轉貼) |   |  
				| 
 |  
				| 雖然是PHP範例,但你可以依照方法改成FOXPRO 
 PHP技術文件 》資料庫連結 》MySQL
 全文檢索SQL範例(MySQL版)
 
 這是一查詢整個TABLE所有Field的範例...使用自定的"and" "or" "not"等...
 這是MySQL版,
 
 <?
 mysql_pconnect("localhost","root","");
 mysql_select_db("test");
 Echo fulltextSearchSQL("mem","關鍵字一 or 關鍵字二 and 關鍵字三 not 關鍵字四");
 // select * from mem Where (name Like '%關鍵字一%' OR name Like '%關鍵字二%' AND name Like '%關鍵字三%' And name NOT Like '%關鍵字四%' )
 ## 上面傳回一整句的整個TABLE查詢SQL
 ## 如果只想要一個欄位查詢可以修改fulltextSearchSQL
 
 
 ## $TableName 帶入資料table名稱
 ## $keyword   帶入搜尋字串名稱目前可用and or not等字串
 ## 例句 $keyword="關鍵字一 or 關鍵字二 and 關鍵字三 not 關鍵字四";
 
 Function fulltextSearchSQL($TableName,$keyword){
 $wordSeat=wordSeat($keyword);
 $sql="select * from $TableName Where ";
 $Result=@Mysql_Query("select * from $TableName");
 $FieldNum=@Mysql_Num_Fields($Result);
 For($i=0;$i<$FieldNum;$i++):
 $field[]=@Mysql_Field_Name($Result,$i);
 $sql.=($i!=@Mysql_Num_Fields($Result)-1)
 ?sqlList($keyword,$wordSeat,"$field[$i]"). " OR "
 :sqlList($keyword,$wordSeat,"$field[$i]");
 
 EndFor;
 Return $sql;
 }
 Function wordSeat($keyword){
 For($i=0;$i < Strlen($keyword);$i++):
 If(Strtoupper(Substr($keyword,$i,2))=='OR')
 $Seat_Array[$i+3]="OR";
 If(Strtoupper(Substr($keyword,$i,3))=='AND')
 $Seat_Array[$i+4]="AND";
 If(Strtoupper(Substr($keyword,$i,3))=='NOT')
 $Seat_Array[$i+4]="NOT";
 EndFor;
 Return $Seat_Array;
 }
 Function whereEnd($arraykey,$keyword){
 For($i=$arraykey;$i < Strlen($keyword);$i++):
 If(Strtoupper(Substr($keyword,$i,2))=='OR')
 Return $i;
 If(Strtoupper(Substr($keyword,$i,3))=='AND')
 Return $i;
 If(Strtoupper(Substr($keyword,$i,3))=='NOT')
 Return $i;
 EndFor;
 }
 Function sqlList($keyword,$wordSeat,$field){
 If(!is_Array($wordSeat))                                     //沒有加OR AND NOT
 Return "($field Like '%".Trim($keyword)."%')";            //傳回之SQL語法
 $sql.="(";
 $First=Explode(" ",$keyword);                                //第一個字串內容
 $sql.="$field Like '%$First[0]%' ";
 While(List($c,$cc)=Each($wordSeat)):
 $dd=whereEnd($c,$keyword);
 If(!$dd) $dd=Strlen($keyword);
 $sql.=($cc=='NOT')                                        //有NOT時的SQL語法
 ? "And $field $cc Like '%" . Trim(Substr($keyword,$c,$dd-$c)) . "%' "
 : "$cc $field Like '%" . Trim(Substr($keyword,$c,$dd-$c)) . "%' ";
 EndWhile;
 $sql.=")";
 Return $sql;
 }
 ?>
 |  |  
		| 回頂端 |  |  
		|  |  
		|  |  
  
  	| 
 
 | 您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章
 您 無法 在這個版面編輯文章
 您 無法 在這個版面刪除文章
 您 無法 在這個版面進行投票
 您 無法 在這個版面附加檔案
 您 無法 在這個版面下載檔案
 
 |  |