2013-09-30 100 views
0

转换MySQL查询到笨查询转换MySQL查询在笨查询

当前查询:


$query = "SELECT a.*, b.cost AS future_cost, b.start_date AS future_date 
      FROM (
      SELECT * FROM (
       SELECT * FROM outbound_routes 
       ORDER BY start_date 
      ) x 
      GROUP BY pattern 
     ) a 
      LEFT JOIN (
      SELECT * FROM outbound_routes 
      ORDER BY start_date 
     ) b 
      ON a.pattern = b.pattern AND a.id != b.id 
      GROUP BY a.pattern"; 

$result=$this->db->query($query); 

粗体查询我要追加搜索变量像

$this->db->where('pattern','1'); 

任何帮助和想法,将不胜感激。

+0

我不认为你可以加入使用活动记录类两个SQL查询。你将不得不使用'$ this-> db-query('ALL YOUR SQL HERE')方法。 – Jeemusu

回答

0

不幸的是,我不认为有可能使用codeigniters active record class将where子句附加到现有的SQL中。活动记录类只能处理表之间的简单连接。

要将它追加到您现有的查询中,您可以使用查询绑定将变量传递给查询。

$query = "SELECT a.*, b.cost AS future_cost, b.start_date AS future_date 
      FROM (
      SELECT * FROM (
       SELECT * FROM outbound_routes 
       ORDER BY start_date 
      ) x 
      GROUP BY pattern 
     ) a 
      LEFT JOIN (
      SELECT * FROM outbound_routes 
      ORDER BY start_date 
     ) b 
      ON a.pattern = b.pattern AND a.id != b.id 
      GROUP BY a.pattern 
      WHERE pattern = ?"; 

$result = $this->db->query($query, array(1)); 
0

试试这个

$this->db->select('select a.*, b.cost AS future_cost, b.start_date AS future_date'); 
$this->db->from('(select * from (select * from outbound_routes order by start_date) x group by pattern) a'); 
$this->db->join('(select * from outbound_routes order by start_date) b', 'a.pattern = b.pattern and a.id != b.id','left '); 
$this->db->where('a.pattern','1'); 
$this->db->group_by("a.pattern"); 
$result=$query = $this->db->get(); 

Active Record

或看到CodeIgniter Subqueries