博客列表 >mysql多条件组合查询

mysql多条件组合查询

福哥的博客
福哥的博客原创
2017年07月24日 20:16:291430浏览

方法一:

<?php
//6个条件,组合筛选这大概要写6*5*4*3*2*1个if()
  
/* $info = $_POST;  
 if(isset($info['xxx'])){  
   $sql = "select * from tablename where xxxx";  
}else if(isset($info['xxxx'])){  
  
}   
......  */
 
//简便方法如下
$info = I('post.');  
//根据条件写判断  
$sql = "select * from ordertable where 1=1";  
if($info['warehouse']){  
    $sql = $sql." and MarketId = ".$info['warehouse'];  
}  
if($info['Createtime']){  
     $sql = $sql." and Createtime = ".$info['Createtime'];  //如果第一条成立,此$sql就是变化后的新$sql,依次加下去,哪条符合就加一个and.
}  
if($info['Paytime']){  
     $sql = $sql." and Paytime = ".$info['Paytime'];  
}  
if($info['Paystatus']){  
     $sql = $sql." and Paystatus = ".$info['Paystatus'];  
}  
if($info['orderNum']){  
     $sql = $sql." and orderNum = ".$info['orderNum'];  
}  
if($info['Product']){  
     $sql = $sql." and Product = ".$info['Product'];  
}  
?>

方法二:

<?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------------------------------------------
mysqli_query("SET NAMES GB2312");
$rs = mysqli_query($link, $q);
echo "<table>";
echo "<tr><td>部门</td><td>员工姓名</td></tr>";
while($row = mysqli_fetch_object($rs)) echo "<tr><td>$row->depart</td><td>$row->ename</td></tr>";
echo "</table>";
mysqli_close($link);
/*注释1:接收search.php通过post传递出的参数,把两个参数分别存储入变量:depart和ename。
注释2:判断参数是否为空,如果为空,不作任何操作。如果有参数传出,则生成相应SQL语句。
注释3:用追加的方法生成SQL语句。
注释4:生成数据集,显示数据,最后关闭数据库连接。*/
?>

方法三:

index.html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SQL多条件查询示例</title>
</head>
<body>
<form method="post" action="deal.php">
<h1>房屋出租</h1>
房屋类型:<select name="type">
<option value="1">一居室</option>
<option value="2">二居室</option>
<option value="3">三居室</option>
</select>
面积:<input name="area" type="text"/>
地址:<input name="addr" type="text"/>
<input name="btn" type="submit" value="搜索" />
</form>
</body>
</html>

deal.php文件:-->

<?php
//连接数据库
$conn=mysqli_connect("localhost","root","");
 
//选择数据库
$db=mysqli_select_db("数据库名");
 
//接收 参数
$type=$_POST['type'];
$area=$_POST['area'];
$addr=$_POST['addr'];
 
//SQL语句主题
$query="select * from room  where "; 
 
//根据条件和传的值拼接sql语句
//判断面积不为空
if($type!=""){
    //然后根据具体面积分情况拼接
    switch($type){
        case 1:
            //一居室
            $query.=" room_type=1"; 
            break;
        case 2:
            $query.=" room_type=2";
            break;
        case 3:
            $query.=" room_type=3";
            break;
    }
}
 
//面积
if($area!=""){
    $query.=" and area ={$area}";
}
 
//地址
if($addr!=""){
    $query.=" and addr like '%{$addr}%'"; //地址
}
 
//执行查询
$result=mysqli_query($link,$query);
 
//遍历结果
echo "搜搜结果如下:";
while($row=mysql_fetch_array($result)){
     
    echo "地址:".$row['addr'];
    echo "";
    echo "面积:".$row['area'];
    echo "";
    echo "居室:".$row['type'];
    echo "";
    echo "价格:".$row['addr'];
    echo "";
    //等等
}
 
?>

方法四:

所使用的方法:$sqlArr=array();array_push();implode();

<?php
/*
原理,
一、建立sql语句前半句,并且建立一个空数组。
二、根据条件是否为空来判断是否向数组中添加元素。如果不为空,使用array_push()方法来添加,第一个参数为数组名称,第二个参数为值。
三、全部条件判断完毕用implode()方法来合并数组元素。第一个参数为使用什么字符来拆分,可以为字符串,第二个参数为数组。
四、加上sql语句后半句。完成sql语句!
 */

$sql="select * from member where member_Type=0 and (";
  $sqlArr=array();
  if($member_id!="")
       array_push($sqlArr," id like '$member_id' ");
  if($member_Name!="")
       array_push($sqlArr," member_Name like '%$member_Name%' ");
  if($member_Creation!="")
       array_push($sqlArr," member_Creation>'%$member_Creation%'");
      $sql.=implode(" or ",$sqlArr);
      $sql.=") order by id desc";
      $rs=mysqli_query($link,$sql);
 $total=mysqli_num_rows($rs);
 $totalpage=ceil($total/$PageSize);
 if($page>$totalpage)
      $page=$totalpage;
 
 
$sql="select * from member where member_Type=0 and (";
  $sqlArr=array();
  if($member_id!="")
       array_push($sqlArr," id like '$member_id' ");
  if($member_Name!="")
       array_push($sqlArr," member_Name like '%$member_Name%' ");
  if($member_Creation!="")
       array_push($sqlArr," member_Creation>'%$member_Creation%'");
  $sql.=implode(" or ",$sqlArr);
  $sql.=") order by id desc limit ".($page-1)*$PageSize.",".$PageSize;
 
这样,所有的参数都可以添加进来。

?>

方法五:

php商品条件筛选功能

<?php
php按条件筛选商品的功能,还是比较简单的。
其实就是根据不同的条件组成SQL查询条件,从数据库里查出不同的商品出来。
举个例子:
用户可以按价格范围、按品牌、按商品名称这几项来综合查询。
那么,在用户选择了上面这些查询条件后(可能这3个条件都设置了,也可能只设置了其中2个),提交到服务器端,服务端程序收到用户的查询条件,开始组装SQL查询语句,最后执行组装好的SQL查询语句,返回结果给用户。

代码举例:
用户提交的查询:
price='0-1000'; //按价格范围0-1000元查询

brandid=20;  //要求品牌必须是ID号为20的这个(假设这个ID号为20的品牌,名字叫”西部数据")
productname='绿盘'; //商品名称只设置了2个字以做模糊查询

用户点了查询按钮后,根据程序的不同,可能是get方式也可能是post方式发送查询请求,现假设为post方式。

然后在服务器端程序中,收到用户的查询请求:
$price=$_POST['price'];
$price_arr=explode('-',$price); //这里是把价格范围按-号拆散成数组,方便在组装SQL查询语句时用。

$brandid=$_POST['brandid'];
$productname=$_POST['productname'];

当然,上面的数据获取后,还要进行相应的安全方面的检查与处理,这里先略过。

接下来,开始组装SQL查询语句:

$sqlexp='';
//下面开始组根据用户设置的查询条件进行SQL查询条件的组装

if(!empty($price)) {
    $sqlexp.=' and (price>='.$price_arr[0].' and price<='.$price_arr[1];

}
if(!empty($brandid)) {
   $sqlexp.=' and brandid='.$brandid;
}
if(!empty($productname)) {
   $sqlexp.=" and instr(productname,'$productname')>0";
}

//下面执行SQL查询

$result=mysql_query("select * from product where state=1 ".$sqlexp);

在上面的查询完成后,把查询结果返回给用户,就完成了用户按条件筛选商品的功能。
追问:
嗯,后面取地址栏参数,拼接where条件,这个都好弄,就不是不知道,怎么在前端页面查询条件上面a链接构造地址。
追答:
在前端页面中,一般是用form表单,而不是用A链接。
<form name="search_form" method="post" action="search.php">
价格范围:<input type="text" name="price" />
品牌:<select name="brandid">
          <option value="">请选择</option>
          <option value="1">希捷</option>
          <option value="20">西部数据</option>
          <option value="21">日立</option>
          </select>
商品名称:<input type="text" name="productname" />
<input type="submit" name="searchbtn" value="开始查询" />

?>


上一条:文件读写与创建下一条:22114
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议