找回密码
 加入怎通
查看: 502|回复: 3

[站长八卦] PHP组合查询多条件查询实例代码

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍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
回复

使用道具 举报

∩菰_髑∩ 发表于 2012-09-01 17:05:45 | 显示全部楼层
说的好,学习了!顶你!!!
回复 支持 反对

使用道具 举报

⑤眼镜妹 发表于 2026-03-05 01:25:37 | 显示全部楼层
完全赞同,我也是这么认为的,英雄所见略同~
回复 支持 反对

使用道具 举报

aicw8 发表于 2026-03-11 11:36:58 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复 支持 反对

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-3-14 14:32 , Processed in 0.065390 second(s), 24 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表