今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
! I; c3 g" C. i先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
# O$ X$ ~* {5 n+ u# j7 ?
- N1 y @) M( j5 t- e" F( i/ C那就让我们开始。 http://120yd.com
$ a' d! S7 x* f1 `2 c
+ q( D1 d6 G1 ?# i) h0 R首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。
. b- K" r) ^7 p" V" j( A7 u( S/ d+ ]. M- K6 r) E
<html> . f: k, H. C! q- f2 R, g8 g6 S
<body>
5 \+ ]( d2 @% h2 N. N4 m2 ~<h3>查询</h3> . \" @' d& M. G v7 i
<form action="search_result.php" method="POST">
5 v S' s7 R. l% [& y部门名称:<input type="text" size=25 name="depart" value=""> <br><br> ( |- K0 d& j( ?" l$ g' @
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> " A6 `4 r5 P: C' ^5 q! L8 N: f
<input type="submit" name="提交" value="提交"> ! ~2 n' C/ ?$ a A4 y/ L
</form>
7 m+ Y/ Q( l: _. ]( |. K, N</body> 5 [/ i1 }# z( d. R- [. C% `
</html> , c3 n5 U' H" n' c' N
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
+ o& |* u* ~- h" f: ?
5 T/ J/ b6 d4 K5 m: a# l% G |, q然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
9 n, x$ _3 |- x3 ^; \0 u+ F
|: U) T9 l& x! W8 j8 ]- q怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 1 U8 O4 D, E. {; }0 P- @' C# B3 t! O
/ _$ J- @" s. w7 Y& T* G% ]
正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 ! n& d: ~8 f p5 v/ N1 C
<?php * h# R G6 D7 t
$link =mysql_connect("localhost","root","管理员密码"); + p$ S- k2 n) [8 ?
mysql_select_db("infosystem", $link); % E& s" \2 N! o* F" x i: f
?>
/ c3 ?; \9 D% J# Z% Y3 \8 O
6 p: i# J1 ]9 i- v4 E! e<?php
9 f: _( Z! o& g T+ v/ d
7 }! E3 l- A: U7 o# `/ p//注释1-----------------------------
# E- E" O) m% k$depart=$_POST["depart"];
3 H, R( t3 P+ }3 a" O4 p$ename=$_POST["ename"]; 8 Z2 W: h) S R) N) w! l# K
0 x3 P. d# }. s5 D9 a//注释2------------------------ 2 Z) r) L" o8 f: [4 i0 N5 N( n: Y
if($depart != null){
8 C( ~7 O8 S* @$a = " and depart like '%$depart%'";} # E1 o0 o; q. v7 S5 e5 r
5 V* d+ T: B% ^! n) i) d* z
if($ename != null){
4 g( k; \3 r0 m, x; R" @$b = " and ename like '%$ename%'";} & x2 P# ~, v% t! m. G; A5 X
% C o: A/ |4 w% r
//注释3------------------------
3 j# x7 T' U; {3 E! E$q = "SELECT * FROM info where (1=1)";
6 d& w- Z- h- Z( y+ r4 N3 _( U# ^$q .=$a; / }) _8 S/ ~: `. |
$q .=$b;
3 S6 ~7 ?/ \% t! L" I5 R' Q+ }
3 \! G( ^7 o- s7 _ Q) I! E% `. S: I7 N
//注释4------------------------------------------ 4 Q0 F: J% M }* A3 f2 n- r
mysql_query("SET NAMES GB2312");
6 s. G! P- K7 F7 Q$rs = mysql_query($q, $link);
+ ^* \; Y1 ^# |$ v' t# k. L, R2 Decho "<table>"; A3 H+ e) t% G5 r9 h
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
. @# w7 ^/ p# L: Q+ H2 L& k9 S u
, Y- P6 l- J% ^, Y. G& J1 I/ B
& B3 Z' b3 f. z; }) h$ d V
# N7 x( S% y3 ?7 f) H6 u& g2 D* x |