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

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
' O+ R0 D+ w  Q9 b先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
2 a1 _/ K4 c+ J$ L# K# ]/ K* C* b, ?1 D, L
那就让我们开始。 http://120yd.com
& R. j7 ?8 D( e5 s; Y4 i& c8 Z6 z$ z% Q/ u! m! [
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 2 K$ r& P' d6 q+ \: A
- g. p7 |- n: \# o* R
<html>
: V8 ]* [; O/ ^# j<body> : C8 K9 p' f! c7 v
<h3>查询</h3> ; z( Z7 h0 E+ V" m
<form action="search_result.php" method="POST">
+ P' `) s( [3 ]2 z3 l) Y+ t部门名称:<input type="text" size=25 name="depart" value=""> <br><br> 2 t$ [5 v2 [, |0 e6 Z
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
- ~, O  W. @5 y! o  Y<input type="submit" name="提交" value="提交"> / e2 ~. ~* D& p1 o
</form>
5 }2 k, s# u3 G; ]</body>
1 L0 b  Q- D0 M</html> # I: T3 O+ ]7 _
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
% T& c/ A/ L/ `1 u5 F1 e9 ?# b9 N" Y
/ Q- v# x* R- A% B, k然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。 , i" @1 C9 w# W- Z

$ a! h# K) R) ^/ L. y" f" r( d怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 1 r- m& N, S* N# s% b- z
, _1 O' y" s' F4 C
正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
9 v/ P. Q7 o: B  K3 x  X# A, [& F<?php 1 }5 z. j: ~& U% b
$link =mysql_connect("localhost","root","管理员密码"); - |% P+ K# v; y
mysql_select_db("infosystem", $link); ( _0 Z: ]- k2 H$ K
?> - f3 Q0 M- z4 Y1 }

  h, U2 r: j) Y" B  U3 c<?php $ _# ~9 R* T8 X- i7 b
4 h, A  l: Q9 f
//注释1----------------------------- . W8 ?8 `- a0 O6 L9 r: h
$depart=$_POST["depart"];
5 G3 y; K" j7 g; S$ename=$_POST["ename"]; 6 Z2 r3 W; a, @
9 p2 P6 x- D4 W
//注释2------------------------
8 d9 s# y" P' T' m3 Z4 nif($depart != null){ 0 @, J1 P% X7 @
$a = " and depart like '%$depart%'";}
# z* T% |4 [$ h( o- V# f, }" A8 r2 j" o( H. x
if($ename != null){
. Q2 u; I8 R5 X. _$ I. `$b = " and ename like '%$ename%'";} 9 |& o( c1 W$ t+ `1 w& o0 B

5 z) x" D5 u3 B$ ?- K- m//注释3------------------------
/ z+ J: R. Z4 t" Z9 U/ m$q = "SELECT * FROM info where (1=1)"; 8 d8 I1 o' T5 V' J% x$ u7 j
$q .=$a; ! x( A) c& Z, R7 d; o
$q .=$b;
  e( d6 k- M3 ]( ?6 y
3 V' q! L& W! a# x. Q8 Y6 a, ?
8 e* v1 K3 O0 K5 f! _* s8 w//注释4------------------------------------------ / |! f& @8 _" @" G
mysql_query("SET NAMES GB2312");
7 q& L4 s: y+ D) y8 w7 v! |5 j8 p. P$rs = mysql_query($q, $link); 3 ]4 \0 [- C: |9 Z4 o4 V
echo "<table>";
; j" t0 o( H* h, e+ ?: ]8 t4 k- x- x* Fecho "<tr><td>部门</td><td>员工姓名</td></tr>";   z, J( V' ^" C& X
: z0 M0 s. Q5 y- j! [  a

' `4 Y; j0 m! T' l9 C/ a9 U
9 l# O$ o3 k$ d6 H
回复

使用道具 举报

∩菰_髑∩ 发表于 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-13 13:45 , Processed in 0.265248 second(s), 24 queries , Gzip On.

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

    Powered by Discuz! X3.5

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