VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

PHP全文檢索示範(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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;
}
?>
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作