今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
2 ^/ I' G7 [1 x* O; v先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
1 U/ L) {5 |; Y/ a2 O1 v1 W. }1 I* [2 {8 x8 j( i5 Q
那就让我们开始。 http://120yd.com1 O/ S& F5 o8 W5 i6 s
9 w( P8 M5 Q1 \' Z5 A5 h& W/ [9 e" M: J
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 & i. e+ ~: ^3 b p, B% ?
, w) @, a2 ]$ U# v1 `9 Y7 s7 a, x<html>
4 h/ P# c6 y8 k, m7 `" q<body> . q2 @, x9 q; q, C% Q
<h3>查询</h3> 2 K( z3 v6 s, U5 a) u8 \* B
<form action="search_result.php" method="POST"> 9 j \( I2 P. h9 E+ I. C
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
' Y7 z. ~4 m- U7 ^员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> ( K: H% r8 W" o4 O
<input type="submit" name="提交" value="提交">
" d6 s/ n% m$ F. B0 t* U* R' b8 j</form> 4 K1 B+ X, V& d1 }) L" E3 ~
</body> . W! Q/ V8 r6 p4 o4 s
</html> % n9 k* z. K, y$ S: M
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
& T; B3 \ E7 ]& L) N Q5 h# m3 L! ~8 a9 V; x9 J% T
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。 1 }8 P! d. y9 |5 y& o
) e( G6 M% R- ~5 ^; j7 I" y
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 ' y/ V9 J" k2 O4 q. x& Q
6 l5 _% E$ T6 u( E, H正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
k4 y; e( N, P r6 A) h" e7 o0 e u# F<?php 2 d- \7 {& h; R* V: v) Q9 \4 {0 a
$link =mysql_connect("localhost","root","管理员密码"); , l4 x+ }# U( z
mysql_select_db("infosystem", $link); $ k ]1 p# W6 X# m) q
?>
: N; ~& C r$ d8 n% f7 `, T
+ H e) E; S2 a! o; l2 D4 V) S<?php G( L+ Q. d5 D% B/ }8 w0 S
8 U" R( r Z s x) q- M//注释1-----------------------------
8 f- J" P- f j. g0 \; S$depart=$_POST["depart"];
# v: o0 b( q5 |# |$ename=$_POST["ename"]; + K1 Z. A8 Q: p1 A% M! M
$ h# v: ~& |, W) s8 \
//注释2------------------------
p+ D# ^4 W5 ~! `9 Tif($depart != null){ 9 q0 A6 N# v% ?$ J y
$a = " and depart like '%$depart%'";} 6 J& i( R6 x5 d% R7 N8 w
- `3 |8 K6 r( d4 V& H
if($ename != null){
5 A# H% h8 `) \$b = " and ename like '%$ename%'";}
% M; P2 l/ H R. g: [* g! k* j: P' f7 K, [7 ?1 t9 O% o9 P
//注释3------------------------
9 D- _! Y+ X. V, o$ i$q = "SELECT * FROM info where (1=1)";
9 o2 F: [' G" y. `( G1 b/ o$q .=$a; 8 H$ U! x, w _, ]) H% b0 p
$q .=$b; 3 b# E3 o$ R# [ \
: c! M- v: [0 t) w9 l( d( k7 u7 [4 ~: z1 \
//注释4------------------------------------------ # ?% E3 X7 G$ Y8 u" [1 j5 d; d
mysql_query("SET NAMES GB2312");
& B3 [- g/ _5 m3 x8 K* Y$rs = mysql_query($q, $link);
3 I3 s* \1 N- i) B" s& Decho "<table>"; 5 O9 g: `- g4 ?) a8 H; `3 x! R Q
echo "<tr><td>部门</td><td>员工姓名</td></tr>"; ) x4 `% j y# s/ S' q: }/ `$ {
: U& Q! t0 `( F. ]; L% n4 s3 x6 n }9 o: Y5 r+ Z
' ]: N) j& ? X3 z m
|