php - Sql 在 codeigniter 中将 AND 与 OR 组合

标签 php mysql sql-server codeigniter join

我想在 codeigniter SQL 查询中将 AND 条件与 OR 条件结合起来

我正在根据用户输入创建一个 where 条件。

当用户选择租金时,我会在 WHERE(AND) 中传递 OR 条件,如下所示 $where['p.contract_id = 3 OR p.contract_id']=2;

这是我的代码..

$where = array('p.status' => 1, 'pi.order' => 1);

      if(!$fil['city'] == 0){
    $where['p.city_id']=$fil['city'];   
  }

  if(!$fil['area'] == 0){
    $where['p.area_id']=$fil['area']; 
  }

  if(!$fil['type'] == 0){
    $where['p.type_id']=$fil['type']; 
  }


  if(!$fil['bed'] == 0 && !$fil['bed']== 10){
    $where['pd.bed']=$fil['bed']; 
  }
  if($fil['bed']== 10){
    $where['pd.bed >']=$fil['bed']; 
  }


  if(!$fil['bath'] == 0 && !$fil['bath'] == 10){
    $where['pd.bath']=$fil['bath']; 
  }
  if($fil['bath'] == 10){
    $where['pd.bath >']=$fil['bath']; 
  }


  if(!is_null($fil['rent'])){
    $where['p.contract_id = 3 OR p.contract_id']=2; 
  }
  if(!is_null($fil['sale'])){
    $where['p.contract_id']=1; 
  }

  if(!$fil['price_from'] ==""){
    $where['pd.price >']=$fil['price_from']; 
  }


        //real query
      $this->db->select('p.*, pd.title, pd.price, pd.bed, pd.bath, pd.size, pd.size_type, pd.full_description, 
  pi.name as image, pi.order, a.name as area, t.name as type_name, ct.name as contract_type, pv.views as views, 
  c.name as city');
  $this->db->from('property p'); 
  $this->db->join('property_detail pd', 'pd.property_id=p.property_id', 'left');
  $this->db->join('property_image pi', 'pi.property_id=p.property_id', 'left');
  $this->db->join('type t', 't.type_id=p.type_id', 'left');
  $this->db->join('contract_type ct', 'ct.con_typ_id=p.contract_id', 'left');
  $this->db->join('property_views pv', 'pv.property_id=p.property_id', 'left');
  $this->db->join('area a', 'a.area_id=p.area_id', 'left');
  $this->db->join('city c', 'c.city_id=p.city_id', 'left');
  $this->db->where($where);
  $this->db->order_by('p.property_id','desc'); 
  $this->db->limit($config['per_page'], $this->uri->segment(3));        
  $query = $this->db->get();
  $result = $query->result();
  return $result;

错误

Error Number: 1064

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 12 行“2”附近使用的正确语法

SELECT    'p'.*, 
          'pd'.'title', 
          'pd'.'price', 
          'pd'.'bed', 
          'pd'.'bath', 
          'pd'.'size', 
          'pd'.'size_type', 
          'pd'.'full_description', 
          'pi'.'NAME' AS 'image', 
          'pi'.'ORDER', 
          'a'.'NAME'   AS 'area', 
          't'.'NAME'   AS 'type_name', 
          'ct'.'NAME'  AS 'contract_type', 
          'pv'.'views' AS 'views', 
          'c'.'NAME'   AS 'city' 
FROM      'property' 'p' 
LEFT JOIN 'property_detail' 'pd' 
ON        'pd'.'property_id'='p'.'property_id' 
LEFT JOIN 'property_image' 'pi' 
ON        'pi'.'property_id'='p'.'property_id' 
LEFT JOIN 'type' 't' 
ON        't'.'type_id'='p'.'type_id' 
LEFT JOIN 'contract_type' 'ct' 
ON        'ct'.'con_typ_id'='p'.'contract_id' 
LEFT JOIN 'property_views' 'pv' 
ON        'pv'.'property_id'='p'.'property_id' 
LEFT JOIN 'area' 'a' 
ON        'a'.'area_id'='p'.'area_id' 
LEFT JOIN 'city' 'c' 
ON        'c'.'city_id'='p'.'city_id' 
WHERE     'p'.'status' = 1 
AND       'pi'.'ORDER' = 1 
AND       'p'.'contract_id' = 3 
OR        p.contract_id 2

我非常清楚这个错误是由于如果这个 $where['p.contract_id = 3 OR p.contract_id']=2; 引起的。有人可以帮我在 codeigniter 中使用 OR 语句传递这个 where 条件吗? TNx..

最佳答案

这可能对你有用。在这里,我在检查 if 条件的 where 条件之后放置了 or_where()where()

      $this->db->distinct();
      $this->db->select('p.*, pd.title, pd.price, pd.bed, pd.bath, pd.size, pd.size_type, pd.full_description, 
      pi.name as image, pi.order, a.name as area, t.name as type_name, ct.name as contract_type, pv.views as views, 
      c.name as city',false);
      $this->db->from('property p'); 
      $this->db->join('property_detail pd', 'pd.property_id=p.property_id', 'left');
      $this->db->join('property_image pi', 'pi.property_id=p.property_id', 'left');
      $this->db->join('type t', 't.type_id=p.type_id', 'left');
      $this->db->join('contract_type ct', 'ct.con_typ_id=p.contract_id', 'left');
      $this->db->join('property_views pv', 'pv.property_id=p.property_id', 'left');
      $this->db->join('area a', 'a.area_id=p.area_id', 'left');
      $this->db->join('city c', 'c.city_id=p.city_id', 'left');
      $this->db->where($where);
      if(!is_null($fil['rent'])){
      $this->db->where('p.contract_id','3'); 
      $this->db->or_where('p.contract_id','2'); 
      }
      $this->db->order_by('p.property_id','desc'); 
      $this->db->limit($config['per_page'], $this->uri->segment(3));        
      $query = $this->db->get();
      $result = $query->result();
      return $result;

输出

SELECT `p`.*, `pd`.`title`, `pd`.`price`, `pd`.`bed`, `pd`.`bath`, `pd`.`size`, `pd`.`size_type`, `pd`.`full_description`, `pi`.`name` as image, `pi`.`order`, `a`.`name` as area, `t`.`name` as type_name, `ct`.`name` as contract_type, `pv`.`views` as views, `c`.`name` as city FROM (`property` p) LEFT JOIN `property_detail` pd ON `pd`.`property_id`=`p`.`property_id` LEFT JOIN `property_image` pi ON `pi`.`property_id`=`p`.`property_id` LEFT JOIN `type` t ON `t`.`type_id`=`p`.`type_id` LEFT JOIN `contract_type` ct ON `ct`.`con_typ_id`=`p`.`contract_id` LEFT JOIN `property_views` pv ON `pv`.`property_id`=`p`.`property_id` LEFT JOIN `area` a ON `a`.`area_id`=`p`.`area_id` LEFT JOIN `city` c ON `c`.`city_id`=`p`.`city_id` WHERE `p`.`status` = 1 AND `pi`.`order` = 1 AND `p`.`contract_id` = '3' OR `p`.`contract_id` = '2' ORDER BY `p`.`property_id` desc LIMIT 0

关于php - Sql 在 codeigniter 中将 AND 与 OR 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845739/

相关文章:

php - 如何限制用户只能向MySQL插入数据1次

mysql - 如何向该查询添加附加条件(使用 CASE)?

php - 从数据库获取 Google map 标记到 map

c# - 无法绑定(bind)多部分标识符 "sxxx@yahoo.com"

sql - 从sql获取每周数据

php - isset 静态类属性

php - 从过期的 MAMP Pro 试用版迁移到免费版 MAMP (OSX) 后显示 Wordpress 安装页面

php - 选择最后一分钟创建的文件

java - 如何使用每行的 JCheckboxes 将新列添加到 JTable 中

sql-server - 使用 CTE 以逗号分隔的字符串