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

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com' d  H, [) |: r) \" J" X7 G
先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 9 Q- v. ?! C. K$ P" R
6 C8 d$ D+ ]% v6 S) g+ |. R7 E7 U
那就让我们开始。 http://120yd.com
! j+ E) k. [. l0 f1 f5 R
0 @* x8 P- [2 i3 e4 V& f% X首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。
0 X& U. ^3 W, \5 q# ~+ o2 f
$ w1 P9 h5 W  I- i& j<html> ' C; r! r, l  `+ @0 M. p7 j& t, I
<body> 1 s! X- J+ X9 D8 j5 T" X$ ]
<h3>查询</h3>
/ P* w& D  ^/ N2 M0 r* V2 H<form action="search_result.php" method="POST"> 3 R6 L1 g( W+ j) I, Z% w) {7 \
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
6 o" \# a! `! j% c% x! l员工姓名: <input type="text" size=25 name="ename" value=""> <br><br> 1 w! d* T& S6 A4 Q/ J; {
<input type="submit" name="提交" value="提交"> 5 @4 z3 \) j1 @) g, Y$ b
</form> 2 ]  l4 J, \% _
</body>
4 P; A9 V! |9 O/ G</html>   d( K. l* O, O0 ^  s# n2 A! b
和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 , c3 ^8 D0 V' S! z1 K

0 m& ~$ h% o& l  u然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
' f3 R6 m, ^% x  {2 q) {9 x
$ B0 `7 I" y/ r怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 " A8 y% E2 y" C5 u

, g/ H( v3 g8 v正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。 % l( T0 p3 q. |. y
<?php
. V$ A: e1 a- D$link =mysql_connect("localhost","root","管理员密码");
/ u: X, T  V+ K$ Pmysql_select_db("infosystem", $link);
9 k/ m/ J- |% N$ R: S?>
, |2 Q2 u8 {; f4 v4 a
& n- X0 H2 Y3 Z1 `<?php
2 t& H  \* a: j/ c- m
! ]6 X5 `$ }9 t+ w//注释1----------------------------- 2 f5 |  i! f# V
$depart=$_POST["depart"]; 0 j* O( e/ g: P; W
$ename=$_POST["ename"]; # o/ W, O8 ?( m% F: d1 x+ S: ]1 R

  T% B+ t3 {% M# v  ~//注释2------------------------
- [9 h$ Z, f9 A4 xif($depart != null){ - A6 v, Z6 g: I$ j4 t# t
$a = " and depart like '%$depart%'";}
4 s8 N1 T5 U6 h9 ~1 n" [# h" p, v$ b7 Y' m* J  E
if($ename != null){ / X* X/ k" n5 _( L# J* u. L
$b = " and ename like '%$ename%'";}
1 ]- n8 g8 Q$ ~: q4 o6 D& B# z0 m, j0 s' s8 k: X3 |$ u2 ~/ y
//注释3------------------------
, @; I/ a1 p3 X& f( \) Q  w6 a1 C$q = "SELECT * FROM info where (1=1)";   H/ |/ L' n! q1 L# |+ H
$q .=$a;
$ H) w+ s  l) `1 k+ Z$q .=$b; 3 y9 H0 y; X4 ?. X

9 B' J6 G( [" G( a/ v( p  R! q  R$ L. z: n, M8 S. h
//注释4------------------------------------------   m0 I& G  p$ E
mysql_query("SET NAMES GB2312");
# t+ M5 O' [3 C5 G6 @* m) P0 J& H$rs = mysql_query($q, $link);
' q8 c1 C* P8 U+ S: b% U  hecho "<table>";
) W- |: \4 F, b$ A3 ]echo "<tr><td>部门</td><td>员工姓名</td></tr>"; 0 O9 B7 S0 e% a7 y& v& s, i7 i
, k) T* @3 N0 W) ^; I

2 e, d6 H3 `+ |1 G
) D% |- m5 d& [  g% V" K

暂时无法加载帖子列表

回复

使用道具 举报

∩菰_髑∩ 发表于 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-9-10 22:42 , Processed in 0.056800 second(s), 26 queries , Gzip On.

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

    Powered by Discuz! X3.5

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