找回密码
 加入怎通
查看: 544|回复: 5

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
2 ^/ I' G7 [1 x* O; v先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
1 U/ L) {5 |; Y/ a2 O1 v1 W. }1 I* [2 {8 x8 j( i5 Q
那就让我们开始。 http://120yd.com1 O/ S& F5 o8 W5 i6 s
9 w( P8 M5 Q1 \' Z5 A5 h& W/ [9 e" M: J
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 & i. e+ ~: ^3 b  p, B% ?

, w) @, a2 ]$ U# v1 `9 Y7 s7 a, x<html>
4 h/ P# c6 y8 k, m7 `" q<body> . q2 @, x9 q; q, C% Q
<h3>查询</h3> 2 K( z3 v6 s, U5 a) u8 \* B
<form action="search_result.php" method="POST"> 9 j  \( I2 P. h9 E+ I. C
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
' Y7 z. ~4 m- U7 ^员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> ( K: H% r8 W" o4 O
<input type="submit" name="提交" value="提交">
" d6 s/ n% m$ F. B0 t* U* R' b8 j</form> 4 K1 B+ X, V& d1 }) L" E3 ~
</body> . W! Q/ V8 r6 p4 o4 s
</html> % n9 k* z. K, y$ S: M
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。
& T; B3 \  E7 ]& L) N  Q5 h# m3 L! ~8 a9 V; x9 J% T
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。 1 }8 P! d. y9 |5 y& o
) e( G6 M% R- ~5 ^; j7 I" y
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 ' y/ V9 J" k2 O4 q. x& Q

6 l5 _% E$ T6 u( E, H正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
  k4 y; e( N, P  r6 A) h" e7 o0 e  u# F<?php 2 d- \7 {& h; R* V: v) Q9 \4 {0 a
$link =mysql_connect("localhost","root","管理员密码"); , l4 x+ }# U( z
mysql_select_db("infosystem", $link); $ k  ]1 p# W6 X# m) q
?>
: N; ~& C  r$ d8 n% f7 `, T
+ H  e) E; S2 a! o; l2 D4 V) S<?php   G( L+ Q. d5 D% B/ }8 w0 S

8 U" R( r  Z  s  x) q- M//注释1-----------------------------
8 f- J" P- f  j. g0 \; S$depart=$_POST["depart"];
# v: o0 b( q5 |# |$ename=$_POST["ename"]; + K1 Z. A8 Q: p1 A% M! M
$ h# v: ~& |, W) s8 \
//注释2------------------------
  p+ D# ^4 W5 ~! `9 Tif($depart != null){ 9 q0 A6 N# v% ?$ J  y
$a = " and depart like '%$depart%'";} 6 J& i( R6 x5 d% R7 N8 w
- `3 |8 K6 r( d4 V& H
if($ename != null){
5 A# H% h8 `) \$b = " and ename like '%$ename%'";}
% M; P2 l/ H  R. g: [* g! k* j: P' f7 K, [7 ?1 t9 O% o9 P
//注释3------------------------
9 D- _! Y+ X. V, o$ i$q = "SELECT * FROM info where (1=1)";
9 o2 F: [' G" y. `( G1 b/ o$q .=$a; 8 H$ U! x, w  _, ]) H% b0 p
$q .=$b; 3 b# E3 o$ R# [  \

: c! M- v: [0 t) w9 l( d( k7 u7 [4 ~: z1 \
//注释4------------------------------------------ # ?% E3 X7 G$ Y8 u" [1 j5 d; d
mysql_query("SET NAMES GB2312");
& B3 [- g/ _5 m3 x8 K* Y$rs = mysql_query($q, $link);
3 I3 s* \1 N- i) B" s& Decho "<table>"; 5 O9 g: `- g4 ?) a8 H; `3 x! R  Q
echo "<tr><td>部门</td><td>员工姓名</td></tr>"; ) x4 `% j  y# s/ S' q: }/ `$ {

: U& Q! t0 `( F. ]; L% n4 s3 x6 n  }9 o: Y5 r+ Z
' ]: N) j& ?  X3 z  m

暂时无法加载帖子列表

回复

使用道具 举报

∩菰_髑∩ 发表于 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 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复

使用道具 举报

戴草帽的王子 发表于 2026-07-10 21:23:10 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-7-27 13:46 , Processed in 0.034843 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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