两行代码搞定多级关联搜索
点击次数:29 次 发布日期:2008-11-26 02:36:46 作者:源代码网
|
/* 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); // 打印出数组中的值. ?> 源代码网供稿. |
