【问题标题】:Codeigniter Active Record issue (where and multiple 'AND' 'OR')Codeigniter Active Record 问题(where 和多个 'AND' 'OR')
【发布时间】:2016-11-30 22:14:11
【问题描述】:

有人可以告诉我如何使用 codeigniter 活动记录生成以下查询吗?

SELECT * FROM `tbl_admins` WHERE (`email`='ci@php.net' OR `uname`='user') AND `upass`='SecretePass';

不写查询, 我的意思是通过数组传递不同的值...... 或 CI 活动记录

谢谢

【问题讨论】:

  • 您是否阅读了用户指南并尝试了一些方法。这是最好的学习方式。

标签: php sql codeigniter activerecord


【解决方案1】:

我相信您可以通过几种方式做到这一点。首先,我假设您将一个数组传递给模型函数,并且该数组是$filters

选项一

$this->db->select('*');
$this->db->from('tbl_admins');
$this->db->where('email', $filters["email"]);
$this->db->or_where('uname', $filters["email"]); 
$this->db->where('upass', $filters["password"]);

选项二

$this->db->select('*');
$this->db->from('tbl_admins');
$this->db->where("(email = '$filters["email"]' OR uname = '$filters["email"]') AND upass = '$filters["password"]'");

我没有测试,所以您可能需要稍微调整选项二中的变量。但这与您想要的非常接近。

这是一个类似 Stack Overflow 问题的 another example

【讨论】:

    【解决方案2】:

    我终于这样写了……

    $conditions = '(`col1`="'.$var1.'" OR `col2`="'.$var1.'") AND `col3`="'.$var2.'"';          
     $query = $this->db->get_where('table',$conditions);
    $result = $query->result();
    

    它有效:)

    【讨论】:

      【解决方案3】:

      您可以使用group_start()group_end() 功能(来自活动记录)将相关的where 子句分组到不同的组中。以下是语法示例:

      $query= $this->db->select('*')
              ->group_start()
              ->or_like($likeColumns)
              ->group_end()
              ->where($whereColumn, $whereValue)
              ->get($table);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-26
        • 2011-11-25
        • 2015-09-17
        • 1970-01-01
        • 2017-11-30
        • 1970-01-01
        • 2014-12-24
        • 2013-05-04
        相关资源
        最近更新 更多