【问题标题】:Using Mysql WHERE IN clause in codeigniter在 codeigniter 中使用 Mysql WHERE IN 子句
【发布时间】:2012-06-16 21:48:50
【问题描述】:

我有以下 mysql 查询。您能告诉我如何以 Codeigniter 的方式编写相同的查询吗?

SELECT * FROM myTable 
         WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
         AND code!='B'

【问题讨论】:

  • 你在我发布的代码中使用了子查询吗
  • 是的,几分钟前我已经成功使用它了.. :) 谢谢 :)
  • @raheelshan。请你检查一下这个帖子。 stackoverflow.com/q/11045611/1209690 谢谢 :)

标签: codeigniter codeigniter-2


【解决方案1】:

您可以使用 codeigniter 的子查询方式来实现此目的,您将不得不破解 codeigniter。像这样
转到系统/数据库/DB_active_rec.php 从这些函数中删除 public 或 protected 关键字

public function _compile_select($select_override = FALSE)
public function _reset_select()

现在子查询写入可用 现在这是您的查询与活动记录

$this->db->select('trans_id');
$this->db->from('myTable');
$this->db->where('code','B');
$subQuery = $this->db->_compile_select();

$this->db->_reset_select();
// And now your main query
$this->db->select("*");
$this->db->where_in("$subQuery");
$this->db->where('code !=', 'B');
$this->db->get('myTable');

事情就完成了。干杯!!!
注意:使用子查询时,您必须使用

$this->db->from('myTable')

而不是

$this->db->get('myTable')

运行查询。
也看看这个

How can I rewrite this SQL into CodeIgniter's Active Records?

注意:在 Codeigntier 3 中,这些功能已经公开,因此您无需破解它们。

【讨论】:

    【解决方案2】:
    $data = $this->db->get_where('columnname',array('code' => 'B'));
    $this->db->where_in('columnname',$data);
    $this->db->where('code !=','B');
    $query =  $this->db->get();
    return $query->result_array();
    

    【讨论】:

      【解决方案3】:

      试试这个:

      $this->db->select("*");
      $this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')");
      $this->db->where('code !=', 'B');
      $this->db->get('myTable');
      

      注意:$this->db->select("*");当您从表中选择所有列时是可选的

      【讨论】:

        【解决方案4】:

        试试这个:

        return $this->db->query("
             SELECT * FROM myTable 
             WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
             AND code!='B'
             ")->result_array();
        

        不是活动记录而是codeigniter的方式http://codeigniter.com/user_guide/database/examples.html 请参阅具有多个结果的标准查询(数组版本)部分

        【讨论】:

          【解决方案5】:

          您可以使用更简单的方法,同时仍然使用活动记录

          $this->db->select("a.trans_id ,a.number, a.name, a.phone")
          $this->db->from("Name_Of_Your_Table a");
          $subQueryIn = "SELECT trans_id FROM Another_Table";
          $this->db->where("a.trans_id in ($subQueryIn)",NULL);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-04-18
            • 2020-10-13
            • 2010-12-07
            • 1970-01-01
            • 1970-01-01
            • 2012-07-19
            • 1970-01-01
            相关资源
            最近更新 更多