今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com' d H, [) |: r) \" J" X7 G
先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 9 Q- v. ?! C. K$ P" R
6 C8 d$ D+ ]% v6 S) g+ |. R7 E7 U
那就让我们开始。 http://120yd.com
! j+ E) k. [. l0 f1 f5 R
0 @* x8 P- [2 i3 e4 V& f% X首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。
0 X& U. ^3 W, \5 q# ~+ o2 f
$ w1 P9 h5 W I- i& j<html> ' C; r! r, l `+ @0 M. p7 j& t, I
<body> 1 s! X- J+ X9 D8 j5 T" X$ ]
<h3>查询</h3>
/ P* w& D ^/ N2 M0 r* V2 H<form action="search_result.php" method="POST"> 3 R6 L1 g( W+ j) I, Z% w) {7 \
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
6 o" \# a! `! j% c% x! l员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> 1 w! d* T& S6 A4 Q/ J; {
<input type="submit" name="提交" value="提交"> 5 @4 z3 \) j1 @) g, Y$ b
</form> 2 ] l4 J, \% _
</body>
4 P; A9 V! |9 O/ G</html> d( K. l* O, O0 ^ s# n2 A! b
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 , c3 ^8 D0 V' S! z1 K
0 m& ~$ h% o& l u然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
' f3 R6 m, ^% x {2 q) {9 x
$ B0 `7 I" y/ r怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 " A8 y% E2 y" C5 u
, g/ H( v3 g8 v正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 % l( T0 p3 q. |. y
<?php
. V$ A: e1 a- D$link =mysql_connect("localhost","root","管理员密码");
/ u: X, T V+ K$ Pmysql_select_db("infosystem", $link);
9 k/ m/ J- |% N$ R: S?>
, |2 Q2 u8 {; f4 v4 a
& n- X0 H2 Y3 Z1 `<?php
2 t& H \* a: j/ c- m
! ]6 X5 `$ }9 t+ w//注释1----------------------------- 2 f5 | i! f# V
$depart=$_POST["depart"]; 0 j* O( e/ g: P; W
$ename=$_POST["ename"]; # o/ W, O8 ?( m% F: d1 x+ S: ]1 R
T% B+ t3 {% M# v ~//注释2------------------------
- [9 h$ Z, f9 A4 xif($depart != null){ - A6 v, Z6 g: I$ j4 t# t
$a = " and depart like '%$depart%'";}
4 s8 N1 T5 U6 h9 ~1 n" [# h" p, v$ b7 Y' m* J E
if($ename != null){ / X* X/ k" n5 _( L# J* u. L
$b = " and ename like '%$ename%'";}
1 ]- n8 g8 Q$ ~: q4 o6 D& B# z0 m, j0 s' s8 k: X3 |$ u2 ~/ y
//注释3------------------------
, @; I/ a1 p3 X& f( \) Q w6 a1 C$q = "SELECT * FROM info where (1=1)"; H/ |/ L' n! q1 L# |+ H
$q .=$a;
$ H) w+ s l) `1 k+ Z$q .=$b; 3 y9 H0 y; X4 ?. X
9 B' J6 G( [" G( a/ v( p R! q R$ L. z: n, M8 S. h
//注释4------------------------------------------ m0 I& G p$ E
mysql_query("SET NAMES GB2312");
# t+ M5 O' [3 C5 G6 @* m) P0 J& H$rs = mysql_query($q, $link);
' q8 c1 C* P8 U+ S: b% U hecho "<table>";
) W- |: \4 F, b$ A3 ]echo "<tr><td>部门</td><td>员工姓名</td></tr>"; 0 O9 B7 S0 e% a7 y& v& s, i7 i
, k) T* @3 N0 W) ^; I
2 e, d6 H3 `+ |1 G
) D% |- m5 d& [ g% V" K |