今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
! u h2 s6 u) T( B0 k- ?. q2 |0 f先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
u) Q* _; q/ t: B# E* b% v- ^
- V9 W: l. J- R那就让我们开始。 http://120yd.com+ S" F# O% g8 m3 V
# m& B" ~2 J; s% d) ~' x
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 # @/ V4 X( |+ S/ z- \' G
3 Z4 o0 I: }( u/ K3 f
<html>
- V/ B; ^3 I- }! J( \<body> # N, `9 a# h* l+ ]! p
<h3>查询</h3> # m5 T& J, e) g# o
<form action="search_result.php" method="POST"> ) Y0 Q0 b7 g0 A$ L. g
部门名称:<input type="text" size=25 name="depart" value=""> <br><br> * t( R& M0 @1 {# H" d
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> 8 a& }0 s/ {$ Y `+ e
<input type="submit" name="提交" value="提交">
) e# X" `! `- z</form>
/ l0 g! ~4 o# Z+ L/ t1 x' }</body>
N; f9 }5 H s( J</html>
, p! f5 u5 p5 X1 f和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 $ @! q& g6 c- e$ o& u% j. k
T! t$ s" Q- F! ]
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
! C P+ @' U) m( K
+ g+ `# U( }, N! j怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
3 ~# c7 \3 Y. D/ |
) m! E" Y( b; y. j正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
0 t. B. A9 N) F% k<?php , \, l6 ~4 X( W: A
$link =mysql_connect("localhost","root","管理员密码"); 6 x2 `9 [) Y" ]+ o/ B- Z
mysql_select_db("infosystem", $link); % D2 G9 {: i( s* N5 q! x
?>
) c! K1 I4 ^4 G/ |/ ^8 t( b& M) ^6 I: L) h' d$ b
<?php ; ?7 A- E V; R. _$ S; }
2 u g7 v5 `1 ]1 z1 _' s
//注释1-----------------------------
& A3 y2 ^ ^, V+ A$ j# l4 O$depart=$_POST["depart"]; $ S' T& k, f/ X; ~
$ename=$_POST["ename"]; " {/ M; r7 s7 R
# C2 Z5 L4 P! U9 g, l% u: R1 G//注释2------------------------
) N& f2 k( v/ Q, sif($depart != null){
& l8 U0 E0 A0 c4 P: }9 u3 Y$a = " and depart like '%$depart%'";} ( R3 X! h/ R V( e
, u$ g" S8 ^) w* T! Q
if($ename != null){
6 k0 S% [' f5 L- O* v- K! {$b = " and ename like '%$ename%'";}
7 D" R% r; ?) {1 y. ^: y( A: a+ Z/ s$ t* n* r2 b
//注释3------------------------ % {; q% |! `5 a9 L2 Z* t6 P, b
$q = "SELECT * FROM info where (1=1)";
( G$ G/ k+ z$ x+ I$q .=$a;
6 \% Q8 W' s5 s, w$q .=$b; " l0 @/ ?3 J- }) ~
- s) d6 O {& e* u0 |# U/ D8 Z
; x" |+ J, U2 _$ b
//注释4------------------------------------------
3 a7 t+ M; m' ~7 ]2 D. E8 cmysql_query("SET NAMES GB2312"); . Z( \! T, f$ ^+ o
$rs = mysql_query($q, $link);
4 F3 n1 ^: b2 a# j2 ?! Gecho "<table>";
9 F- M7 \% C3 Z; Decho "<tr><td>部门</td><td>员工姓名</td></tr>"; ! u# W ~% {6 `0 ?
+ S( O8 v4 z: y4 n1 I4 ]/ f# f1 o7 ?" R8 w2 g$ l# J
7 o" O8 M( S( W8 m( u! [4 D0 E
|