PHP组合查询多条件查询实例代码

  先向大家说明需求:按照我们系统的要求,我们将通过部门名称、员工姓名、PC名称、IP地址等等字段来进行组合查询从而得到想要的数据结果。那么,为了简单起见,我们用两个条件(部门名称、员工姓名)的组合查询来向大家说明这一技术技巧。当我们只输入部门名而员工姓名为空值时,那么部门内所有员工信息将被呈现,只有当你同时限制部门与员工姓名时,才能查询出唯一信息。

  那就让我们开始。

  首先建立查询页面search.php,不同于上次单一条件查询,这次我们需要两个条件的组合进行查询。

  <html>

  <body>

  <h3>查询</h3>

  <form action="search_result.php" method="POST">

  部门名称:<input type="text" size=25 name="depart" value=""> <br><br>

  员工姓名: <input type="text" size=25 name="ename" value=""> <br><br>

  <input type="submit" name="提交" value="提交">

  </form>

  </body>

  </html>

  和上次一样,我们将depart与ename的值通过Post的方法传递给search_result.php文件。

  然后便到了这次主题的关键,search_result.php文件如何接受这两个参数值,并判断当其中一个字段为空值时,如何将其排除查询条件。

  怎么理解上面这句话,举例子来说,如果我们单纯地将接收参数的查询语句写成 select * from info where depart='部门值参数'  and ename='员工姓名参数' 的话,那么如果其中一个参数为空时我们就将得到 select * from info where depart='技术部' and ename='' ,显然,这样的查询很有可能返回空的结果,因为这句查询语句的意思就是,查询所有技术部没有姓名的人的数据,这不是很荒唐么,倒过来如果是 select * from info where depart='' and ename='sunec' ,那么它的意思就是查询员工姓名为sunec但是不属于任何部门的人,那自然也是查询不到结果的。

  正确的做法应该是,在查询语句中过滤掉那个为空值的的参数。比如,当我们只输入部门名时应该得到 select * from info where depart='技术部' 。这样,查询语句的意思就变成查询所有部门为技术部员工的信息了,这就是我们想要的。

  明确了思路,那么,下一次我们就去实现它!

  <?php

  $link =mysql_connect("localhost","root","管理员密码");

  mysql_select_db("infosystem", $link);

  ?>

  <?php

  //注释1-----------------------------

  $depart=$_POST["depart"];

  $ename=$_POST["ename"];

  //注释2------------------------

  if($depart != null){

  $a = " and depart like '%$depart%'";}

  if($ename != null){

  $b = " and ename like '%$ename%'";}

  //注释3------------------------

  $q = "SELECT * FROM info where (1=1)";

  $q .=$a;

  $q .=$b;

  //注释4------------------------------------------

  mysql_query("SET NAMES GB2312");

  $rs = mysql_query($q, $link);

  echo "<table>";

  echo "<tr><td>部门</td><td>员工姓名</td></tr>";

  while($row = mysql_fetch_object($rs)) echo "<tr><td>$row->depart</td><td>$row->ename</td></tr>";

  echo "</table>";

  mysql_close($link);

  ?>

  注释1:接收search.php通过post传递出的参数,把两个参数分别存储入变量:depart和ename。

  注释2:判断参数是否为空,如果为空,不作任何操作。如果有参数传出,则生成相应SQL语句。

  注释3:用追加的方法生成SQL语句。

  注释4:生成数据集,显示数据,最后关闭数据库连接。

  怎么样,是不是实现了组合查询的功能呢?有机会的话,我将更详细的对此做一些介绍。

  本文转载自www.cenusblog.com