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

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
! u  h2 s6 u) T( B0 k- ?. q2 |0 f先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
  u) Q* _; q/ t: B# E* b% v- ^
- V9 W: l. J- R那就让我们开始。 http://120yd.com+ S" F# O% g8 m3 V
# m& B" ~2 J; s% d) ~' x
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 # @/ V4 X( |+ S/ z- \' G
3 Z4 o0 I: }( u/ K3 f
<html>
- V/ B; ^3 I- }! J( \<body> # N, `9 a# h* l+ ]! p
<h3>查询</h3> # m5 T& J, e) g# o
<form action="search_result.php" method="POST"> ) Y0 Q0 b7 g0 A$ L. g
部门名称:<input type="text" size=25 name="depart" value=""> <br><br> * t( R& M0 @1 {# H" d
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> 8 a& }0 s/ {$ Y  `+ e
<input type="submit" name="提交" value="提交">
) e# X" `! `- z</form>
/ l0 g! ~4 o# Z+ L/ t1 x' }</body>
  N; f9 }5 H  s( J</html>
, p! f5 u5 p5 X1 f和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 $ @! q& g6 c- e$ o& u% j. k
  T! t$ s" Q- F! ]
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
! C  P+ @' U) m( K
+ g+ `# U( }, N! j怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。
3 ~# c7 \3 Y. D/ |
) m! E" Y( b; y. j正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
0 t. B. A9 N) F% k<?php , \, l6 ~4 X( W: A
$link =mysql_connect("localhost","root","管理员密码"); 6 x2 `9 [) Y" ]+ o/ B- Z
mysql_select_db("infosystem", $link); % D2 G9 {: i( s* N5 q! x
?>
) c! K1 I4 ^4 G/ |/ ^8 t( b& M) ^6 I: L) h' d$ b
<?php ; ?7 A- E  V; R. _$ S; }
2 u  g7 v5 `1 ]1 z1 _' s
//注释1-----------------------------
& A3 y2 ^  ^, V+ A$ j# l4 O$depart=$_POST["depart"]; $ S' T& k, f/ X; ~
$ename=$_POST["ename"]; " {/ M; r7 s7 R

# C2 Z5 L4 P! U9 g, l% u: R1 G//注释2------------------------
) N& f2 k( v/ Q, sif($depart != null){
& l8 U0 E0 A0 c4 P: }9 u3 Y$a = " and depart like '%$depart%'";} ( R3 X! h/ R  V( e
, u$ g" S8 ^) w* T! Q
if($ename != null){
6 k0 S% [' f5 L- O* v- K! {$b = " and ename like '%$ename%'";}
7 D" R% r; ?) {1 y. ^: y( A: a+ Z/ s$ t* n* r2 b
//注释3------------------------ % {; q% |! `5 a9 L2 Z* t6 P, b
$q = "SELECT * FROM info where (1=1)";
( G$ G/ k+ z$ x+ I$q .=$a;
6 \% Q8 W' s5 s, w$q .=$b; " l0 @/ ?3 J- }) ~
- s) d6 O  {& e* u0 |# U/ D8 Z
; x" |+ J, U2 _$ b
//注释4------------------------------------------
3 a7 t+ M; m' ~7 ]2 D. E8 cmysql_query("SET NAMES GB2312"); . Z( \! T, f$ ^+ o
$rs = mysql_query($q, $link);
4 F3 n1 ^: b2 a# j2 ?! Gecho "<table>";
9 F- M7 \% C3 Z; Decho "<tr><td>部门</td><td>员工姓名</td></tr>"; ! u# W  ~% {6 `0 ?

+ S( O8 v4 z: y4 n1 I4 ]/ f# f1 o7 ?" R8 w2 g$ l# J
7 o" O8 M( S( W8 m( u! [4 D0 E
回复

使用道具 举报

∩菰_髑∩ 发表于 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-4-28 05:14 , Processed in 1.064623 second(s), 50 queries , Gzip On.

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

    Powered by Discuz! X3.5

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