您现在的位置是:首页-> 米鼠技术 ->两行代码搞定多级关联搜索

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

<font size="3">&lt;</font>?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
<font size="3">&lt;</font><font size="3">&gt;</font>25 AND usersex=1
* termvalue查询条件对应的值和条件符号,例如:=@1@,
<font size="3">&lt;</font><font size="3">&gt;</font>@25@,like '%@com@%'等,最之是条件表达式右侧的东西和termfiled数组一一对应,
* 且下标必需为数字,通常情况下符号右边可能是变量,所以变量的前后一定要加上'@'符号
*
*/
private dbname;
private searchfiled = array();
private termfiled = array();
private termvalue = array();

/**
* 设置所有属性的值,参数为两个属性和其值
*/
public function __construct(dbv,sv,fiv,vv)
{
this-
<font size="3">&gt;</font>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-
<font size="3">&gt;</font>pmname = value;
}
else
{
return null;
}
}

/**
* 参数id是WHERE 后边跟的第一个字段名用来进行第一次判断
* 参数value是字段id的默认值
* 参数emblem是条件判断的符号,例如
<font size="3">&gt;</font>,<font size="3">&lt;</font>,<font size="3">&lt;</font><font size="3">&gt;</font>
* 参数last是SQL语句最部分,可以为空
* */
public function GetSearch(id,emblem="
<font size="3">&lt;</font><font size="3">&gt;</font>",emblemvalue=0,last="ORDER BY subtime DESC")
{
termfiled = this-
<font size="3">&gt;</font>termfiled;
termvalue = this-
<font size="3">&gt;</font>termvalue;
filenum = count(this-
<font size="3">&gt;</font>termvalue);
if(count(this-
<font size="3">&gt;</font>termfiled) != count(this-<font size="3">&gt;</font>termvalue))
{
return null;
}
else
{
filed = "";
foreach(this-
<font size="3">&gt;</font>searchfiled as value)
{
filed .= value.",";
}
fnum = strlen(filed);
filed = substr(filed,0,(fnum-1));
sql = "SELECT ";
sql .= filed;
sql .= " FROM ";
sql .= this-
<font size="3">&gt;</font>dbname;
sql .= " WHERE {id}{emblem}{emblemvalue} ";
for(i=0;i
<font size="3">&lt;</font>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);
}
}
}
?
<font size="3">&gt;</font>
实例:
<font size="3">&lt;</font>?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('
<font size="3">&gt;</font>@0@','="@上海@"',' LIKE "%@中国@%"'); // 要查寻的条件
objsql = new Mysql_Class();
objsearch = new Search(table,filedd,term,termv); // 实例化这个类
print_arr = objsearch-
<font size="3">&gt;</font>GetSearch('CodexId',"<font size="3">&lt;</font><font size="3">&gt;</font>","0","ORDER BY SubTime DESC"); // 调用类中方法行到结果数组
print_r(print_arr); // 打印出数组中的值.
?
<font size="3">&gt;</font>


热点文章
最新项目
相关文章 最新文章