当前位置:首页 > 两行代码搞定多级关联搜索

两行代码搞定多级关联搜索

点击次数:1512  更新日期:2011-01-03
\n

<?php
/*
Name: Search.class.php
Author: Genghonghao
Revisions: 2006/12/16
功能 : 多条件关联查寻类
*/
class Search extends Mysql_Class
{
/**
* dbname:数据库名
* searchfiled:查询的字段名例如:SELECT username,userage,usersex FROM
* termfiled查询的条件的字段,where后面的字段名。例如:如WHERE USERID<>25 AND usersex=1
* termvalue查询条件对应的值和条件符号,例如:=@1@,<>@25@,like ‘%@com@%’等,最之是条件表达式右侧的东西和termfiled数组一一对应,
* 且下标必需为数字,通常情况下符号右边可能是变量,所以变量的前后一定要加上’@\'符号
*
*/
private dbname;
private searchfiled = array();
private termfiled = array();
private termvalue = array();

/**
* 设置所有属性的值,参数为两个属性和其值
*/
public function __construct(dbv,sv,fiv,vv)
{
this->SetPm(dbv,sv,fiv,vv);
}

/**
* 设置所有属性的值
*
*/
public function SetPm(v1,v2,v3,v4)
{
self::__set(‘dbname’,v1);
self::__set(‘searchfiled’,v2);
self::__set(‘termfiled’,v3);
self::__set(‘termvalue’,v4);
}
// * 设置属性的值的函数
public function __set(pmname,value)
{
if(isset(value))
{
this->pmname = value;
}
else
{
return null;
}
}

/**
* 参数id是WHERE 后边跟的第一个字段名用来进行第一次判断
* 参数value是字段id的默认值
* 参数emblem是条件判断的符号,例如>,<,<>等
* 参数last是SQL语句最部分,可以为空
* */
public function GetSearch(id,emblem=”<>”,emblemvalue=0,last=”ORDER BY subtime DESC”)
{
termfiled = this->termfiled;
termvalue = this->termvalue;
filenum = count(this->termvalue);
if(count(this->termfiled) != count(this->termvalue))
{
return null;
}
else
{
filed = “”;
foreach(this->searchfiled as value)
{
filed .= value.”,”;
}
fnum = strlen(filed);
filed = substr(filed,0,(fnum-1));
sql = “SELECT “;
sql .= filed;
sql .= ” FROM “;
sql .= this->dbname;
sql .= ” WHERE {id}{emblem}{emblemvalue} “;
for(i=0;i<filenum;i++)
{
//termvalue[i] = str_replace(” “,”",termvalue[i]);
if(!strstr(termvalue[i],”@@”) and !strstr(termvalue[i],”\\”\\”") and !strstr(termvalue[i],”%%”))
{
termvalue[i] = str_replace(“@”,”",termvalue[i]);
sql.= “AND {termfiled[i]}{termvalue[i]} “;
}
}
if(!empty(last))
{
sql.=last;
}
// * Execute为父类中的数据据库操作方法,返回的值是数组!
return parent::Execute(sql);
}
}
}
?>
实例:
<?php
include_once(‘include/common.inc.php’);
include_once(‘include/Search.class.php’); // 调用这个文件
table = “tax_codex”; //查寻的数据库表名
filedd = array(‘Title’,\'Text’); //要查寻的字段
term = array(‘Click’,\'City’,\'Title’); // 要查寻的条件字段
termv = array(‘>@0@’,\'=”@上海@”‘,’ LIKE “%@中国@%”‘); // 要查寻的条件
objsql = new Mysql_Class();
objsearch = new Search(table,filedd,term,termv); // 实例化这个类
print_arr = objsearch->GetSearch(‘CodexId’,”<>”,”0″,”ORDER BY SubTime DESC”); // 调用类中方法行到结果数组
print_r(print_arr); // 打印出数组中的值.
?>

\n