找回密码
 加入怎通
查看: 573|回复: 6

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

[复制链接]
艾尚时尚 发表于 2012-09-01 15:56:42 | 显示全部楼层 |阅读模式
今天想向大家介绍PHP页面间如何进行多条件组合查询。在很多其它网站也有很多相关介绍,但都不够详尽,在这里,我将详细地为大家说明这一比较实用但又相当关键的技术。 http://120yd.com
# I8 s8 w: r6 n9 V  Q先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。 * ]* O# C) E0 P. V
# i3 X' b) N$ D. [. ]2 `1 L4 H
那就让我们开始。 http://120yd.com
6 h. k% S6 {0 U1 O$ r. g
( w: g3 Y9 t( o" J首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。 " j, ]0 O' [2 R. \9 ^3 I& f4 {

' x. I( ]9 L; `3 c( R& U. {<html> # }& l  u/ l* K: k- Y6 I4 P
<body>
" Y5 C  g( a9 ], L1 y" g6 K9 Y& g<h3>查询</h3>
: w' f2 J3 s; q' ^0 Z% V<form action="search_result.php" method="POST"> 9 w$ H0 T+ W0 r3 W
部门名称:<input type="text" size=25 name="depart" value=""> <br><br>
% W& x$ {- q% u, H4 U员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>
# D0 d4 D& `' O0 T/ v" b& c; X<input type="submit" name="提交" value="提交">
6 ]% @- ]; h: q* i</form> 8 N! Y9 ]/ ?6 L; ?2 q7 D
</body>
8 M& a1 U2 ~/ i8 ^5 g0 W: }</html>
" R# m7 Y1 p" w; R6 L" A0 x和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。 / x) U" |0 B' \6 Z

1 F* A1 U8 G! o- `) g; H然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。
# x9 F, G4 B. l5 h4 ~
* |! ~! C* C6 }. k. R怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数' and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。 6 H* i; e, q+ D* e

  N- W2 _! v) ~$ H& i+ q正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。
+ @& J. \8 A9 d5 y" J<?php - M) v, L+ r: C* l" `6 u5 V% |7 E
$link =mysql_connect("localhost","root","管理员密码"); % h0 {  ]* w+ Y5 D: v
mysql_select_db("infosystem", $link);
+ L! X- p8 {8 D# c/ l1 b" N?> * u2 [1 C5 F7 Z5 E  V; _& e9 a

) T& j/ _) m% p; _<?php 9 I. \4 m8 p1 l7 m3 n7 X1 t

6 h/ J* |8 H- {: ]5 t//注释1----------------------------- * \8 c$ B* W2 p" q0 R6 S  @
$depart=$_POST["depart"]; & J; e' d# j# c4 x" G
$ename=$_POST["ename"];
% k) D: p! K* W. l; i8 u- `- T; V5 @+ f( j9 \2 j- N( Y* n
//注释2------------------------ 3 Z0 p. p' z  f9 `* a
if($depart != null){ ) Y; {6 F+ R$ R, ~. X) ?
$a = " and depart like '%$depart%'";}
& X6 O+ U0 r/ N7 V
* m; h) H3 j  ^6 [& l$ Qif($ename != null){ 7 G2 v' F& p4 b# e' l
$b = " and ename like '%$ename%'";}
; M7 o( [8 l5 S; b4 E  K7 o! N: p/ H3 ~/ L$ a8 a, ~, S0 }! Q! I
//注释3------------------------
; T6 p+ `  C* J) v' Q; _$q = "SELECT * FROM info where (1=1)"; 7 e8 a+ U/ ~1 Q4 V4 r
$q .=$a; : o- I7 v4 s6 W" o* T% u7 n1 ~
$q .=$b;
" Q# M3 s# W5 A1 M1 H) \% d2 i# x1 E7 K; S$ Y
$ e! V  h$ D) I, T2 Y, J! Y4 [) J; C. [
//注释4------------------------------------------ 4 G' a, }; X# F" O2 I# P& @( G6 S
mysql_query("SET NAMES GB2312");
5 q. N! X1 k! p6 b$rs = mysql_query($q, $link);
8 x( l5 ~& Z3 W, G/ Becho "<table>";
. O% b( m6 }6 m6 eecho "<tr><td>部门</td><td>员工姓名</td></tr>";
7 X) U6 ?- |" Y4 q8 N" K8 h/ J8 [% U: B
) U8 v0 B2 _. `  E; [& \
7 G' m+ _7 [* Y2 Q  E2 ^

暂时无法加载帖子列表

回复

使用道具 举报

∩菰_髑∩ 发表于 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 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-10-26 20:37 , Processed in 0.076382 second(s), 52 queries , Gzip On.

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

    Powered by Discuz! X3.5

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