create table test (
id int(11) not null default '0' auto_increment,
title varchar(255) not null,
content text not null,
primary key(id)
);
?php
/*************************************************************
/ 支持逻辑OR/AND关键字搜索高亮显示搜索结果的代码
/*************************************************************
/ Title........: Search and Highlight Function
/************************************************************//*************************************************************
/ Function........: search_parse($keywords,$fields)
/ Notes...........:
/ ...$keywords....: eg. "a and b or c"
/ ...$fields......: Field's name eg:array("field1","field2")
/ Return..........: Return the SQL
/************************************************************/
function search_parse($keywords,$fields)
{
if ($keywords)
{
$words = explode(" ",$keywords);
for ($i = 0;$i < count( $words ); $i++)
{
if ($words[$i])
{
if (strtolower($words[$i]) == "and" || strtolower($words[$i]) == "or")
{
if ($i > 0)
{
if($words[$i] == "and") $sql.=" AND ";
elseif($words[$i] == "or") $sql.=" OR ";
}
}
else
{
$first=0;
$sql_tmp="( ";
foreach ($fields as $key => $value)
{
if ($first == 0)
{
$sql_tmp.=$value." LIKE '%".$words[$i]."%'";
$first=1;
}
else
{
$sql_tmp.=" OR ".$value." LIKE '%".$words[$i]."%'";
}
}
if(trim($sql_tmp) != "(") $sql_tmp.=" )";
if($i == 0) $sql=$sql_tmp;
else $sql.=$sql_tmp;
}
}
}
}
return $sql;
}
/*************************************************************
/ Function........: highlight_result($str,$keywords)
/ Notes...........:
/ ...$str.........: The String needed to highlight
/ ...$keywords....: eg. "a and b or c"
/ Return..........: Return the Highlighted String
/************************************************************/
function highlight_result($str,$keywords)
{
$words = explode(" ",$keywords);
for ($i=0;$i<count($words);$i++)
{
if(strtolower($words[$i]) == "and" or strtolower($words[$i]) == "or")
continue;
$str=str_replace("$words[$i]","<font color=blue><b>$words[$i]</b></font>",$str);
}
return $str;
}//Example:
$keywords="鉴于 and 一下";
$fields=array("title","content");
$link = @mysql_connect("localhost", "yjj", "ygfqqqqpe") or die("Could not connect");
$qq=mysql_select_db("yjj",$link) or die("Could not Select the Database!");
$sql=search_parse($keywords,$fields);
echo $sql;
$query="select title from test where $sql";
$result=mysql_query($query) or die("Invalid query:$query");
while($row=mysql_fetch_array($result))
{
echo "<li>".highlight_result($row[title],$keywords)."</li>";
}
mysql_close($link);
?>
这好像是phpteam的还是谁的来,我以前收下来的,你可以参照一下,
其实很简单的,
你只要把这个字符一个一个(substr)分开然后组合成一个用or组合成while条件就可以了,
id int(11) not null default '0' auto_increment,
title varchar(255) not null,
content text not null,
primary key(id)
);
?php
/*************************************************************
/ 支持逻辑OR/AND关键字搜索高亮显示搜索结果的代码
/*************************************************************
/ Title........: Search and Highlight Function
/************************************************************//*************************************************************
/ Function........: search_parse($keywords,$fields)
/ Notes...........:
/ ...$keywords....: eg. "a and b or c"
/ ...$fields......: Field's name eg:array("field1","field2")
/ Return..........: Return the SQL
/************************************************************/
function search_parse($keywords,$fields)
{
if ($keywords)
{
$words = explode(" ",$keywords);
for ($i = 0;$i < count( $words ); $i++)
{
if ($words[$i])
{
if (strtolower($words[$i]) == "and" || strtolower($words[$i]) == "or")
{
if ($i > 0)
{
if($words[$i] == "and") $sql.=" AND ";
elseif($words[$i] == "or") $sql.=" OR ";
}
}
else
{
$first=0;
$sql_tmp="( ";
foreach ($fields as $key => $value)
{
if ($first == 0)
{
$sql_tmp.=$value." LIKE '%".$words[$i]."%'";
$first=1;
}
else
{
$sql_tmp.=" OR ".$value." LIKE '%".$words[$i]."%'";
}
}
if(trim($sql_tmp) != "(") $sql_tmp.=" )";
if($i == 0) $sql=$sql_tmp;
else $sql.=$sql_tmp;
}
}
}
}
return $sql;
}
/*************************************************************
/ Function........: highlight_result($str,$keywords)
/ Notes...........:
/ ...$str.........: The String needed to highlight
/ ...$keywords....: eg. "a and b or c"
/ Return..........: Return the Highlighted String
/************************************************************/
function highlight_result($str,$keywords)
{
$words = explode(" ",$keywords);
for ($i=0;$i<count($words);$i++)
{
if(strtolower($words[$i]) == "and" or strtolower($words[$i]) == "or")
continue;
$str=str_replace("$words[$i]","<font color=blue><b>$words[$i]</b></font>",$str);
}
return $str;
}//Example:
$keywords="鉴于 and 一下";
$fields=array("title","content");
$link = @mysql_connect("localhost", "yjj", "ygfqqqqpe") or die("Could not connect");
$qq=mysql_select_db("yjj",$link) or die("Could not Select the Database!");
$sql=search_parse($keywords,$fields);
echo $sql;
$query="select title from test where $sql";
$result=mysql_query($query) or die("Invalid query:$query");
while($row=mysql_fetch_array($result))
{
echo "<li>".highlight_result($row[title],$keywords)."</li>";
}
mysql_close($link);
?>
这好像是phpteam的还是谁的来,我以前收下来的,你可以参照一下,
其实很简单的,
你只要把这个字符一个一个(substr)分开然后组合成一个用or组合成while条件就可以了,
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货