/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = eregi_replace("[ \t\r\n\,]+","|",$keyword);
$keyword = explode("|",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
if($num_word=="1")
{
$tmp = $field. " LIKE \"%".$keyword[0]."%\" ";
}
elseif($num_word>1)
{
$tmp = "( ";
for($i = 0;$i<$num_word;$i++)
{
$first = 0;
if($first==0)
{
$tmp.= $field." LIKE \"%".$keyword[$i]."%\" ";
$first = 1;
}
if($first!= 0)
{
$i++;
$tmp.= $con." ".$field." LIKE \"%".$keyword[$i]."%\" ";
}
if(trim($tmp)!= "(")
{
$tmp.= " )";
}
}
}
}
elseif($method=="exact")//精确查找
{
if($num_word>"0")
{
$tmp = " instr(".$field.",'".$keyword[0]."')!=0";
$first = "1";
}
if($first=="1")
{
for($n = 1;$n<$num_word;$n++)
{
$tmp.=" ".$con." instr(".$field.",'".$keyword[$n]."')!=0 ";
}
}
}
return $tmp;
}
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = eregi_replace("[ \t\r\n\,]+","|",$keyword);
$keyword = explode("|",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
if($num_word=="1")
{
$tmp = $field. " LIKE \"%".$keyword[0]."%\" ";
}
elseif($num_word>1)
{
$tmp = "( ";
for($i = 0;$i<$num_word;$i++)
{
$first = 0;
if($first==0)
{
$tmp.= $field." LIKE \"%".$keyword[$i]."%\" ";
$first = 1;
}
if($first!= 0)
{
$i++;
$tmp.= $con." ".$field." LIKE \"%".$keyword[$i]."%\" ";
}
if(trim($tmp)!= "(")
{
$tmp.= " )";
}
}
}
}
elseif($method=="exact")//精确查找
{
if($num_word>"0")
{
$tmp = " instr(".$field.",'".$keyword[0]."')!=0";
$first = "1";
}
if($first=="1")
{
for($n = 1;$n<$num_word;$n++)
{
$tmp.=" ".$con." instr(".$field.",'".$keyword[$n]."')!=0 ";
}
}
}
return $tmp;
}
* $con 关系,and或or [只能选一个?]
* $method 模糊或精确 [ok]
* $field 要查找的字段 [ok] 如何使用关键字。它的格式是什么样的? 如果$con只能选择一个的话、那这个函数的意义就不大了。还请您说明一下。谢谢!还有具体的用法。
改一下这一句,比如想用+来隔开,可以改成这样
$keyword = eregi_replace("[ \t\r\n\,\+]+","|",$keyword);and或是or在任何情况下都只能有一个出来,默认是or,可以增大匹配几率。
我不明白一个即是0又是1的数是什么,相信你也不知道。//具体用法:
//比如你可以从表单中得到查询数据:
$keyword = "abc xyz";//关键字
$con = "and";//与
$method = "like";//模糊
$field = "title";//如果你有title字段的话
$tmp = super_search($keyword,$con,$method,$field);//假设你有一个叫news的表,你想从标题里找到匹配的关键字,下面是SQL
$sql = "select * from news where $tmp";
函数有点问题吧?
echo super_search("a b c d","","like","var");结果:
( var LIKE "%a%" OR var LIKE "%b%" )var LIKE "%c%" OR var LIKE "%d%" )
显然是错的
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = eregi_replace("[ \t\r\n\,]+","|",$keyword);
$keyword = explode("|",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
if($num_word=="1")
{
$tmp = $field. " LIKE \"%".$keyword[0]."%\" ";
}
elseif($num_word>1)
{
$tmp = "( ";
for($i = 0;$i<$num_word;$i++)
{
if($i==0)
{
$tmp.= $field." LIKE \"%".$keyword[$i]."%\" ";
}
if($i!= 0)
{
$tmp.= $con." ".$field." LIKE \"%".$keyword[$i]."%\" ";
}
}
$tmp.=")";
}
}
elseif($method=="exact")//精确查找
{
if($num_word>"0")
{
$tmp = " instr(".$field.",'".$keyword[0]."')!=0";
$first = "1";
}
if($first=="1")
{
for($n = 1;$n<$num_word;$n++)
{
$tmp.=" ".$con." instr(".$field.",'".$keyword[$n]."')!=0 ";
}
}
}
return $tmp;
}echo super_search("a b c d","","like","var");
output:( var LIKE "%a%" OR var LIKE "%b%" OR var LIKE "%c%" OR var LIKE "%d%" )
<?php
/**
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
$tmp = " $field $method '%".join("%' $con $field $method '%",$keyword)."%'";
}
elseif($method=="exact")//精确查找
{
$tmp = " instr($field,'".join("')!=0 $con instr($field,'",$keyword)."')!=0";
//或 $tmp = " $field='".join("' $con $field='",$keyword)."'";
}
return $tmp;
}
echo super_search("a b c d","","like","var")."<br>";
echo super_search("a b c d","","exact","var");
?>
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 要查找的字段
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
$con==""?$con = "OR":NULL;
$method=="like"?$tmp = " $field $method '%".join("%' $con $field $method '%",$keyword)."%'":($method=="exact"?$tmp = " instr($field,'".join("')!=0 $con instr($field,'",$keyword)."')!=0":NULL);
return $tmp;
}
echo super_search("a b c d","","like","var")."<br>";
echo super_search("a b c d","","exact","var");
* 功能:高级搜索代码
* 编写时间:2003.5.11
* 编写人:偶然
* 变量: $keyword 关键字
* $con 关系,and或or
* $method 模糊或精确
* $field 字段数组
* 返回值:$tmp sql主体
*/
function super_search($keyword,$con,$method,$field)
{
global $tmp;
$keyword = split("[ \t\r\n\,]+",$keyword);
$num_word = count($keyword);//统计关键字个数
$num = count($field);
if($con=="")
{
$con = "OR";
}
if($method=="like")//模糊查找
{
for($i=0; $i<$num; $i++)
{
$i<$num-1?$condition = $con:$condition=NULL;
$tmp.= " {$field[$i]} $method '%".join("%' $con {$field[$i]} $method '%",$keyword)."%' $condition";
}
}
elseif($method=="exact")//精确查找
{
for($i=0; $i<$num; $i++)
{
$i<$num-1?$condition = $con:$condition=NULL;
$tmp.= " instr({$field[$i]},'".join("')!=0 $con instr({$field[$i]},'",$keyword)."')!=0 $condition";
}
}
return $tmp;
}
$fields = array("title","content","intro");
echo super_search("a b c d","AND","exact",$fields);
echo super_search("a b c d","OR","like",$fields);