两行代码搞定多级关联搜索
<?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); // 打印出数组中的值.
?>