Union Activerecord codeigniter框架

时间:2012-04-05 13:39:21

标签: php sql codeigniter

我正在尝试在codeigniter中执行联合。我在其他地方找到了这个代码框架:

 $this->db->select('title, content, date');
 $this->db->from('mytable');
 $query = $this->db->get();
 $subQuery1 = $this->db->_compile_select();

 $this->db->_reset_select();

 // #2 SubQueries no.2 -------------------------------------------

 $this->db->select('title, content, date');
 $this->db->from('mytable2');
 $query = $this->db->get();
 $subQuery2 = $this->db->_compile_select();

 $this->db->_reset_select();

 // #3 Union with Simple Manual Queries --------------------------

 $this->db->query("select * from ($subQuery1 UNION $subQuery2) as unionTable");

 // #3 (alternative) Union with another Active Record ------------

 $this->db->from("($subQuery1 UNION $subQuery2)");
 $this->db->get();

令我困惑的是你在原始子查询中有一个get_where子句,你如何包含它?像这样:

查询1

 $this->db->select('Id,title, content, date');
 $this->db->from('mytable');
 $query = $this->db->get_where('Boo', array('Id' => $foo['foo_Id']);
 $subQuery1 = $this->db->_compile_select();

查询2

  $this->db->select('title, content, date');
  $this->db->from('mytable2');
  $query = $this->db->get_where('Boo', array('Title' => $foo['foo_Title'])
  $subQuery2 = $this->db->_compile_select();

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将它们全部写在一起。你不必这样做。我在这里写一个例子:

$q = '
 SELECT userid 
 FROM users
 WHERE userid=10
 UNION
 SELECT userid
 FROM users
 WHERE userid=5
';
$result = $this->db->query($q);
return $result;

答案 1 :(得分:0)

如果没有详细记录,您发现的示例将非常难以理解;我会提醒你不要这样做。

您的其他选择包括:

  • 浏览
  • 存储过程
  • 对查询进行硬编码

我建议对其进行硬编码,除非你正在节省切换数据库引擎的可能性,正如评论者提到的那样。

请记住,Always Use Gloves