找回密码
 加入怎通
查看: 522|回复: 4

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
9 f+ Y  {$ k6 s( I# a先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 , [) ~, c, ]8 d" ], n, |4 ~9 z

+ ?5 s' c/ [8 L/ L/ H8 l- f那就让我们开始。 http://120yd.com
4 g* k" e" H# r7 f3 Y+ J% J  j- n2 v& i# o/ u# A
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。
7 i2 A1 m# n) [; q
! B% \/ m& `7 Y" J  K- s<html>
4 K; L1 |2 B3 v9 z1 P1 X<body> 7 o3 _8 p4 W& F! U( Y$ c& c
<h3>查询</h3> 8 e4 g) c+ G1 G# G
<form action="search_result.php" method="POST">
' h6 U& s" x5 Y7 ]8 t, {( i: x部门名称:<input type="text" size=25 name="depart" value=""> <br><br> 9 a7 g' M* s& Y& U5 Y
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> - O6 [# M+ e. B* ^  {" k3 q
<input type="submit" name="提交" value="提交"> / x: F  p) [2 ~$ `! Y
</form> ; [  w5 p9 b( r1 m) P5 v6 v& |8 @
</body> 2 Q4 _9 r" w& O) l+ _$ q/ N8 X
</html> 3 d/ r2 P7 h2 P* _
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 + M. U! Z& R+ \9 H; N

0 l6 E; W! L9 |* _: Z  _6 L- r然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。   ~4 Q0 ^( ~7 v% y% p4 V+ @: e

" [9 N+ w0 O, l) T怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
$ ], A; z9 a2 B! d$ m% g# W
1 b: c% l" D. p* h! l正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 0 S8 Y7 v& ~  Q3 R$ s! t
<?php
9 ~; ^( f) x$ R# z$link =mysql_connect("localhost","root","管理员密码");
( N* [8 y9 K. s( x% Tmysql_select_db("infosystem", $link);
* x" I4 d/ r! r' A! r?>
* u6 k- r) X# p/ r; U$ f
* ]7 n# D9 S: q: m<?php
3 s  S# I) S5 n6 I; L3 y7 c4 ?; t% _& u6 o/ V% U
//注释1----------------------------- : I, X1 j9 o. F# }
$depart=$_POST["depart"];
4 N* y; F( X) d$ename=$_POST["ename"];
! o% \4 O: f; e, _+ X- s
5 p7 F2 q+ S6 w4 b//注释2------------------------
! Y  Y" K7 j3 [' Q  Tif($depart != null){ 2 S, R5 r/ O0 ?5 g# b4 z" A
$a = " and depart like '%$depart%'";} 6 ~7 ~7 U- r) m1 n7 e' O
9 x9 q# N5 l6 U0 ?& {
if($ename != null){ # i1 M/ \+ L3 I% _, `
$b = " and ename like '%$ename%'";}
. J% ?, J- t' V, s' F9 S
3 j  {6 }3 q! q//注释3------------------------ " l- ?: w' F" q8 Z0 ]+ F0 P
$q = "SELECT * FROM info where (1=1)";
: x3 b) @* `3 N/ m# |6 I! d$q .=$a;
& M' C1 g1 z5 \( m$q .=$b; % F# ^9 A& d& p& y6 q2 `: T. g1 ]
( u7 q( V9 ~% y: x

2 ]8 s. [6 w4 z0 k, f3 |//注释4------------------------------------------ 3 q" V$ H8 z* a- C4 Z3 N6 o
mysql_query("SET NAMES GB2312");
! O  ?, _& F: r$rs = mysql_query($q, $link);
9 l5 A+ a: {! _, c6 O1 W! p5 j8 ^* Y2 aecho "<table>"; # c! ?( L- @, h* O7 ?
echo "<tr><td>部门</td><td>员工姓名</td></tr>"; $ v) |% b4 V, U
( w9 P$ g1 L% a7 v8 N: e
7 F8 J" P' j$ ^
* k. F: S$ [+ J, S/ A
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

光芒 发表于 2026-04-28 05:14:35 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复 支持 反对

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-6-10 19:07 , Processed in 0.031105 second(s), 24 queries , Gzip On.

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

    Powered by Discuz! X3.5

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