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

2007-01-06 00:43:26

CODE:

<?php
#D$n^s v0/*PHPChina 开源社区门户IY*ww f/J#B+b AD |
        Name:                 Search.class.phpPHPChina 开源社区门户 Q:IG*Q5GeZ(}
        Author:         Genghonghao
z aTul9E L0        Revisions:        2006/12/16PHPChina 开源社区门户 t|6q;Q:E5wp
        功能     :   多条件关联查寻类
#H%^x9q9l GY6@'c#k(s0*/
7@mN~?pB0class Search extends Mysql_Class PHPChina 开源社区门户7QU4V|%dUn
{PHPChina 开源社区门户;W6Y|Xf8S ]9I_;C
        /**PHPChina 开源社区门户@){ ~#W IK|\
         * $dbname:数据库名PHPChina 开源社区门户/DRS Q7m4^
         * $searchfiled:查询的字段名例如:SELECT username,userage,usersex FROM
bhb8x5W)I,{0M0         * $termfiled查询的条件的字段,where后面的字段名。例如:如WHERE USERID<>25 AND usersex=1PHPChina 开源社区门户6vVjobZ(P&}V
         * $termvalue查询条件对应的值和条件符号,例如:=@1@,<>@25@,like '%@com@%'等,最之是条件表达式右侧的东西和$termfiled数组一一对应,
/b ],Xg0FI!M0         * 且下标必需为数字,通常情况下符号右边可能是变量,所以变量的前后一定要加上'@'符号PHPChina 开源社区门户D6V'?KG xs
         *
D F6u)y9qo0         */
v(A-l ~;Y#r0        private $dbname;                  
Zke7}.g,V0        private $searchfiled = array();  
Z6r;Vv.k x(u*x&k0        private $termfiled = array();   
(Fk|jUv$?8ya0        private $termvalue = array();
8J_B4n"OwC ra!Gg0PHPChina 开源社区门户k'~aeV m}E M
        /**PHPChina 开源社区门户UK%I:W%r P9t
         * 设置所有属性的值,参数为两个属性和其值
e!Q#o5[+KPU0         */
j'wa,D%cx0        public function __construct($dbv,$sv,$fiv,$vv)
hYwY"W6Y0        {
9Y%C Z0d{ P-f0                $this->SetPm($dbv,$sv,$fiv,$vv);
yh9J u y_M0        }PHPChina 开源社区门户&\uAN'R+L
        PHPChina 开源社区门户#yn+o^*Ve|
        /**
+E G9jsd\}2G;xC}0         * 设置所有属性的值
({#TzGxDw0         *
&uA-|'K,Q-U;Jf`0         */
&^ f9R4a[D0        public function SetPm($v1,$v2,$v3,$v4)
v-scY3g;Vxd0        {
4M:nPeW2g0                self::__set('dbname',$v1);
9^A2z/`+?0                self::__set('searchfiled',$v2);PHPChina 开源社区门户&wCsX;oLc
                self::__set('termfiled',$v3);
j6HW n2k_z0                self::__set('termvalue',$v4);
"M1N.o7{"C6l"?YB H0        }
? tU'DYV0        // * 设置属性的值的函数
:[Q8VZu:B M0        public function __set($pmname,$value)PHPChina 开源社区门户1w-g(uNv"@4Z[
        {
0Y9il4b._0                if(isset($value))PHPChina 开源社区门户H1P!nW!C~?
                {
c%w4wv@-w!qZ#`0                        $this->$pmname = $value;
xX s{%K G|_^0                }
2y8kwl(Q(V0                else
2PY(nPO h0                {
aWE_!Cl^0                        return null;
j6ld Wz\r{0                }PHPChina 开源社区门户%{%Be-x0x |"A"~ ^!s]
        }
K!KGy~0        PHPChina 开源社区门户 Q+dU|-d ~
        /**PHPChina 开源社区门户 T+U ]ab'{} c
         * 参数$id是WHERE 后边跟的第一个字段名用来进行第一次判断PHPChina 开源社区门户(Xd4j%\&G XjB
         * 参数$value是字段$id的默认值
3XQ^ js*T0         * 参数$emblem是条件判断的符号,例如>,<,<>等PHPChina 开源社区门户_D:V1N e#vt2@0s4r
         * 参数$last是SQL语句最部分,可以为空PHPChina 开源社区门户!Zc7fc0_(Mk9_f
         * */PHPChina 开源社区门户%E Y xv7T&n O
        public function GetSearch($id,$emblem="<>",$emblemvalue=0,$last="ORDER BY subtime DESC")PHPChina 开源社区门户jx}5AR(X.b-r,R8f
        {
WnU&HY0                $termfiled = $this->termfiled;PHPChina 开源社区门户 pv5Dv \{5_
                $termvalue = $this->termvalue;PHPChina 开源社区门户]p\"[.c,gS%i
                $filenum = count($this->termvalue);PHPChina 开源社区门户2l(tQfY~6r d UJ
                if(count($this->termfiled) != count($this->termvalue))
Gl{3\ iPpi0                {PHPChina 开源社区门户'l v[3~Q+j5|`#ZD
                        return null;PHPChina 开源社区门户 g+Jy;D{:t&l
                }
\?4Si8C+r'N#d_0                else PHPChina 开源社区门户H2| Y ~2]]9^aH!\
                {PHPChina 开源社区门户:f4E7G(^(c eItm
                        $filed = "";
kk,G[jT@r(\ S0                        foreach($this->searchfiled as $value)PHPChina 开源社区门户0?+A]%Ie'N!X"s v
                        {PHPChina 开源社区门户/MlCW;{e JU
                                $filed .= $value.",";PHPChina 开源社区门户.cU!T3_e&T7Ei!h$l
                        }PHPChina 开源社区门户\9qS$[]G ]y
                        $fnum = strlen($filed);
,E(Z A kV5V/EhY N-R0                        $filed = substr($filed,0,($fnum-1));
pu$Y!tg6r7p6r0                        $sql = "SELECT ";
5C \C R/x+Jg$J(~3w0                        $sql .= $filed;PHPChina 开源社区门户!g.Z:RYr @
                        $sql .= " FROM ";PHPChina 开源社区门户(dQ1} q D)| c-n;C
                        $sql .= $this->dbname;PHPChina 开源社区门户nS#Z3| b+rg`] ~
                        $sql .= " WHERE {$id}{$emblem}{$emblemvalue} ";PHPChina 开源社区门户n:j!m4L9wL;M
                        for($i=0;$i<$filenum;$i++)
x@mW6jS0                        {
-U~V7o` k.v0                                //$termvalue[$i] = str_replace(" ","",$termvalue[$i]);PHPChina 开源社区门户RRD)pw#P'u$_[N
                                if(!strstr($termvalue[$i],"@@") and !strstr($termvalue[$i],"\"\"") and !strstr($termvalue[$i],"%%"))
5O!^;Z"M/{(N0                                {
{cp%k0P~0                                        $termvalue[$i] = str_replace("@","",$termvalue[$i]);PHPChina 开源社区门户)p3n|;|0ng b
                                        $sql.= "AND {$termfiled[$i]}{$termvalue[$i]} ";
$B7z@ _&Je/pw+k0                                }
hO nId S0                        }
Pyt1J y!O.N0                        if(!empty($last))PHPChina 开源社区门户/{m-h7miP
                        {
S!e(Ud0wR,D3C1y0                                $sql.=$last;
WN$F}U$c%zX0                        }PHPChina 开源社区门户$y*@ aqG
                        // * Execute为父类中的数据据库操作方法,返回的值是数组!PHPChina 开源社区门户*Hqx%S+|k*x
                        return parent::Execute($sql);
{K-MJ;G _0                }
UX$fe?M3@0g0        }PHPChina 开源社区门户o1W[L2J!|iQv h i
}PHPChina 开源社区门户 q-O^]Eic"v
?>PHPChina 开源社区门户,S%zY xL*AF*a
实例:PHPChina 开源社区门户W'Kmu/sV
<?phpPHPChina 开源社区门户:L"s-u KpMH
include_once('include/common.inc.php');PHPChina 开源社区门户8x(A$k1i,JxC&x G
include_once('include/Search.class.php');  // 调用这个文件PHPChina 开源社区门户4V{R!s(\ `7y!Y-tV
$table = "tax_codex";  //查寻的数据库表名PHPChina 开源社区门户&J KZ'fI;C/j[
$filedd = array('Title','Text'); //要查寻的字段PHPChina 开源社区门户` S2nwBcw.Q
$term  = array('Click','City','Title'); // 要查寻的条件字段
5KC(\oX8e_([0$termv = array('>@0@','="@上海@"',' LIKE "%@中国@%"'); // 要查寻的条件
9{PG p9x~#U,g0$objsql = new Mysql_Class();  PHPChina 开源社区门户7_8W(S^o4k(w0c
$objsearch = new Search($table,$filedd,$term,$termv);  // 实例化这个类
n*t k{n(zk4uN0$print_arr = $objsearch->GetSearch('CodexId',"<>","0","ORDER BY SubTime DESC"); // 调用类中方法行到结果数组PHPChina 开源社区门户8R0b7KL:tK5i!n2Y
print_r($print_arr); // 打印出数组中的值.PHPChina 开源社区门户Ro#`cCM6UexE
?>

 


TAG:

274784501的个人空间 删除 274784501 发布于2007-09-13 20:26:50
太繁杂,不好用
Administrator_yqk 删除 yinqikai1984 发布于2007-02-04 21:22:29 评5分
这就两行啊
Open Toolbar