今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
+ H* d# S. p* @) C; Z2 R" L先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 3 T1 n: J7 A% z1 Z) V' A
1 t9 G1 y' b! `/ |6 c那就让我们开始。 http://120yd.com: C T9 k6 l- X0 b3 X# f, ~
! n+ w M( }& S3 b0 w首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 3 ~/ s$ L5 R7 n
; m7 r+ p+ t' k8 z9 c6 D, R<html>
3 @* a1 r6 A3 k5 U3 |6 M<body> : v7 l! v: i9 z& b* ~! ?
<h3>查询</h3> ; i$ M! |/ F2 e4 Q% C
<form action="search_result.php" method="POST"> & j. ~- p3 T6 ]* C
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
. v5 K4 S' ?/ \5 U- Y8 ~! a员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
" s4 E: n. t8 @; a) r4 D<input type="submit" name="提交" value="提交">
1 r' [4 [# P0 ]; A2 s6 R8 \2 f</form> 0 @" K' e; X' u4 w% k
</body> 6 F- f" i# U: h! B
</html>
5 `& R% c \8 \8 C+ x( Z和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 / U) S& f( [9 _- F7 q
* X3 \* `! f! @# ~/ }- o然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
& o& c" w/ e( l: U7 x7 a: J" b8 Z( M
3 s. N4 z% h# e# [3 d怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
; W# \4 `! p x# W& h' \: a
' C0 }9 u- C K正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 2 s2 ?. M0 d2 R* \) \* a# n
<?php
( P; W0 @3 k9 R' G* v: o) Q# R, Q$link =mysql_connect("localhost","root","管理员密码");
. I- K2 @5 Q1 P4 E! Bmysql_select_db("infosystem", $link); $ [2 D, N e2 ]" r
?> / p' ]- i! X2 e7 h! Y4 k. \% ~2 a
1 z( @8 C+ T4 L1 l8 j
<?php
7 f' d( l. E1 h3 L7 b7 F0 R! T6 j% N& s6 r3 ?$ f
//注释1----------------------------- - `6 b2 ^% x% Q1 d7 }* f
$depart=$_POST["depart"];
$ V- G( T9 g! U) [$ename=$_POST["ename"];
6 u- D' ?7 W* @& f4 E1 b7 Y. G9 [ q! z5 T* ], P* W4 _
//注释2------------------------ " |5 m2 p. U8 E* N) \; I
if($depart != null){
+ [5 |4 A k- O f$a = " and depart like '%$depart%'";} ' h. F% ~# c! X& y: w/ `
, g W( d: v5 I1 j% h8 b
if($ename != null){
0 t9 B" x% Q$ B9 F( V$b = " and ename like '%$ename%'";} & k, m% l5 v6 L) M4 _) r
) w. V$ H f" w/ L( J- u6 D0 d
//注释3------------------------
& N9 N! c2 M5 |! g0 g B$q = "SELECT * FROM info where (1=1)"; ) Q# h7 t/ \! G* e' ~9 X
$q .=$a;
: {- h- o. P5 f9 |( L* X2 J$q .=$b;
$ ?: d7 S& S/ ^$ ~% X/ v, R/ S
$ t8 b/ T+ X y1 [ o# }7 y" n" n% x! s7 H( ^/ [$ v
//注释4------------------------------------------ ) x0 S5 T" x7 M) |8 a6 y- T8 b' Q4 J+ t
mysql_query("SET NAMES GB2312"); + }, o- N% H! {6 A
$rs = mysql_query($q, $link); ! [, O4 ~; {( Y4 a# p: Y5 T
echo "<table>"; 0 F( |$ P: z8 D: |! J- H% B
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
( C4 T: F% g, G7 r V+ i% f2 z" B; Z- q& R* V: C7 T
$ D: e! Y- K2 `0 W0 A6 W+ `9 I' ?5 D
|