今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com8 Q, E2 i+ | f4 }; C
先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
- l5 w* l v% m7 I3 L7 |
9 J$ J3 N2 X1 F2 V那就让我们开始。 http://120yd.com8 d. n/ y+ Y4 Y
3 T: V1 z( D7 L1 ~" U
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 4 d+ R. Q1 ]! W/ E4 c. Z. p
" w& A! R& ?1 y+ J4 S
<html> Q( p- H9 I7 ]# O5 ?' ^; s1 ?/ |
<body>
: e5 H. A) j3 R<h3>查询</h3>
% i0 |4 T$ J9 q/ d& c<form action="search_result.php" method="POST">
: @! k2 e1 `- w' ]部门名称:<input type="text" size=25 name="depart" value=""> <br><br> ! ^8 e. ^. l# R* F
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
# y0 a4 O0 H3 x) j<input type="submit" name="提交" value="提交"> % [* `& K- h3 |4 b& S# L |
</form>
: ~( Q2 H9 g) b' `4 P</body>
7 w# C2 u: q% B& d L( `</html> ' d6 S( T% j6 k$ e) L( O
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 . B! E- L8 n4 a5 O
( ^8 ?; s# b; H
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
1 c3 m4 G* s. z4 K7 i1 a. n; |- }* [( X" y6 U8 n
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 - `8 p" N% ]6 o' P) e
9 G, o/ s- |7 v6 W* ?3 K/ t5 B正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 / i( Y' P+ t! {& }! B" T6 z
<?php ) ^& i4 Q6 {* {5 k# C1 X" U
$link =mysql_connect("localhost","root","管理员密码"); 6 n2 ~% T- j% T4 I# z- P( s4 g
mysql_select_db("infosystem", $link); 8 a1 I6 h6 ]$ E. t$ j2 e* ~1 h
?> 5 `. s- _. X3 A/ ]$ K9 d
: ^6 S' ~5 d, |% f! u) ?
<?php ) z* o: g/ a" L! `3 ]) X! i. r, H) E
. _* D3 H% T- E% e: P: m, c
//注释1----------------------------- ; l: u& _9 x* }' n6 k. b2 O8 P
$depart=$_POST["depart"]; ( |* l- ~( j+ {! y5 ]. Q
$ename=$_POST["ename"];
) {1 O9 _, _4 j: ?2 H: \3 l! w& v, J5 \5 H
//注释2------------------------ 0 C4 R% H5 m) x( U5 C) \$ {
if($depart != null){
# f: |% |% O- ^$a = " and depart like '%$depart%'";}
$ c7 R% T2 T/ X- Q
/ \0 w& b0 w( C6 @3 H) N t" [if($ename != null){
! B$ c2 z( u( @$b = " and ename like '%$ename%'";}
# ^3 L5 e* ~% U; c
0 Z8 Z0 r% V, r: f) U& R! |- ?//注释3------------------------
3 x- M- x7 B* h/ U$q = "SELECT * FROM info where (1=1)";
2 x; x' F9 R* r; E) R, W$ r$q .=$a;
$ h, J0 S) b) ?5 g: i0 y$q .=$b;
P4 ?% ]% b1 K7 D! I2 b, S' o$ N0 M; ^
9 j+ y) M7 d/ m7 c2 O+ e) t
//注释4------------------------------------------ & E% r9 Z+ [# V4 l
mysql_query("SET NAMES GB2312");
. {6 T+ u8 s7 b' s, y( t$ D$rs = mysql_query($q, $link);
! x& t4 s, R& y8 U3 t2 u4 ]: becho "<table>"; / g$ @- r6 E' i2 ?6 L. n. F% s
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
$ ]% d9 S2 g$ z# d+ Q7 s
6 D2 X3 h6 h# l: z& g' d0 a Z; C4 e# [
, T; P+ v# {) g6 p; z+ }1 `. y |