|
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;
}
?> |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|