找回密码
 加入怎通
查看: 576|回复: 7

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com8 Q, E2 i+ |  f4 }; C
先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。
- l5 w* l  v% m7 I3 L7 |
9 J$ J3 N2 X1 F2 V那就让我们开始。 http://120yd.com8 d. n/ y+ Y4 Y
3 T: V1 z( D7 L1 ~" U
首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 4 d+ R. Q1 ]! W/ E4 c. Z. p
" w& A! R& ?1 y+ J4 S
<html>   Q( p- H9 I7 ]# O5 ?' ^; s1 ?/ |
<body>
: e5 H. A) j3 R<h3>查询</h3>
% i0 |4 T$ J9 q/ d& c<form action="search_result.php" method="POST">
: @! k2 e1 `- w' ]部门名称:<input type="text" size=25 name="depart" value=""> <br><br> ! ^8 e. ^. l# R* F
员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
# y0 a4 O0 H3 x) j<input type="submit" name="提交" value="提交"> % [* `& K- h3 |4 b& S# L  |
</form>
: ~( Q2 H9 g) b' `4 P</body>
7 w# C2 u: q% B& d  L( `</html> ' d6 S( T% j6 k$ e) L( O
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 . B! E- L8 n4 a5 O
( ^8 ?; s# b; H
然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
1 c3 m4 G* s. z4 K7 i1 a. n; |- }* [( X" y6 U8 n
怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 - `8 p" N% ]6 o' P) e

9 G, o/ s- |7 v6 W* ?3 K/ t5 B正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 / i( Y' P+ t! {& }! B" T6 z
<?php ) ^& i4 Q6 {* {5 k# C1 X" U
$link =mysql_connect("localhost","root","管理员密码"); 6 n2 ~% T- j% T4 I# z- P( s4 g
mysql_select_db("infosystem", $link); 8 a1 I6 h6 ]$ E. t$ j2 e* ~1 h
?> 5 `. s- _. X3 A/ ]$ K9 d
: ^6 S' ~5 d, |% f! u) ?
<?php ) z* o: g/ a" L! `3 ]) X! i. r, H) E
. _* D3 H% T- E% e: P: m, c
//注释1----------------------------- ; l: u& _9 x* }' n6 k. b2 O8 P
$depart=$_POST["depart"]; ( |* l- ~( j+ {! y5 ]. Q
$ename=$_POST["ename"];
) {1 O9 _, _4 j: ?2 H: \3 l! w& v, J5 \5 H
//注释2------------------------ 0 C4 R% H5 m) x( U5 C) \$ {
if($depart != null){
# f: |% |% O- ^$a = " and depart like '%$depart%'";}
$ c7 R% T2 T/ X- Q
/ \0 w& b0 w( C6 @3 H) N  t" [if($ename != null){
! B$ c2 z( u( @$b = " and ename like '%$ename%'";}
# ^3 L5 e* ~% U; c
0 Z8 Z0 r% V, r: f) U& R! |- ?//注释3------------------------
3 x- M- x7 B* h/ U$q = "SELECT * FROM info where (1=1)";
2 x; x' F9 R* r; E) R, W$ r$q .=$a;
$ h, J0 S) b) ?5 g: i0 y$q .=$b;
  P4 ?% ]% b1 K7 D! I2 b, S' o$ N0 M; ^
9 j+ y) M7 d/ m7 c2 O+ e) t
//注释4------------------------------------------ & E% r9 Z+ [# V4 l
mysql_query("SET NAMES GB2312");
. {6 T+ u8 s7 b' s, y( t$ D$rs = mysql_query($q, $link);
! x& t4 s, R& y8 U3 t2 u4 ]: becho "<table>"; / g$ @- r6 E' i2 ?6 L. n. F% s
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
$ ]% d9 S2 g$ z# d+ Q7 s
6 D2 X3 h6 h# l: z& g' d0 a  Z; C4 e# [

, T; P+ v# {) g6 p; z+ }1 `. y

暂时无法加载帖子列表

回复

使用道具 举报

∩菰_髑∩ 发表于 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 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

太阳 发表于 2026-09-16 22:33:27 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

心平气和 发表于 2026-10-26 20:37:17 | 显示全部楼层
内容很干货,没有多余的废话,值得反复看
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-10-27 00:35 , Processed in 0.036288 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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