2015-02-11 157 views
1

我想在codeigniter 2.2中执行此查询。我阅读文档http://www.codeigniter.com/user_guide/database/results.htmlCodeigniter加入查询失败

我的控制器代码是这样的

  $query = $this->db->query("SELECT a.id, a.child, a.immune, a.immun_date, b.id, b.fname, b.lname, c.id, c.name 
       FROM immun a, children b, immun_master c 
       WHERE a.child = b.id 
       AND c.id = a.immune 
      "); 
     $immun = array(); 
      foreach ($query->result()as $row) { 
      $immun[] = array(
       $row->id, 
       $row->child, 
       $row->immune, 
       $row->immun_date, 
      ); 
      } 

已打开,结果是这样的:

array (
     0 => 
    array (
     0 => '2', 
     1 => '1001', 
     2 => '2', 
     3 => '2011-04-23', 
    ), 
     1 => 
    array (
      0 => '3', 
      1 => '1001', 
      2 => '3', 
      3 => '2011-04-30', 
    ), 
     2 => 
    array (
      0 => '6', 
      1 => '1002', 
      2 => '6', 
      3 => '2011-04-30', 
     ), 
     3 => 
    array (
      0 => '5', 
      1 => '1002', 
      2 => '5', 
      3 => '2011-04-29', 
    ), 
     4 => 
    array (
      0 => '1', 
      1 => '1003', 
      2 => '1', 
      3 => '2011-01-06', 
    ), 
     5 => 
    array (
      0 => '3', 
      1 => '1005', 
      2 => '3', 
      3 => '2010-10-04', 
    ), 
     6 => 
    array (
      0 => '3', 
      1 => '1231', 
      2 => '3', 
      3 => '2014-08-01', 
    ), 
    ) 

这些都是错误的结果。我期待的是查询的合并结果。下面是我所得到的,当我在phpMyAdmin运行查询现在

id child immune immun_date id fname lname id name 
1 1001 2  2011-04-23 1001 Johny Jame 2 Swine Flu Vaccine 
2 1001 3  2011-04-30 1001 Johny Jame 3 Bird Flu Vaccine 
3 1002 6  2011-04-30 1002 Chelsea James 6 Hepatitis B 
4 1002 5  2011-04-29 1002 Chelsea James 5 Measles Vaccine 
5 1003 1  2011-01-06 1003 Charles Jacob 1 H1N1 Vaccine 
6 1005 3  2010-10-04 1005 Hansome Little 3 Bird Flu Vaccine 
7 1231 3  2014-08-01 1231 Jennifer Ylanan 3 Bird Flu Vaccine 

,这将是很好,如果我能得到CI回到同一组合并的数据。我可以看到,它只是返回表格查询进行免疫,而CI没有从另一个表中加入数据。我在某处读到CI没有被构建来处理复杂的查询?真的吗?

任何想法如何获得我需要的数据? 谢谢!

+0

结果是预期的,因为你在做交叉连接。 – 2015-02-11 17:21:15

+0

感谢您的线索! – user1794918 2015-02-11 18:44:55

回答

0
 function immChild() { 

    $this->db->select('c.id, c.name, b.id, b.fname, b.lname, a.id, a.child, a.immune, a.immun_date'); 
    $this->db->join('immun_master as c', 'c.id = a.immune','true'); 
    $this->db->join('children as b', 'a.child = b.id', 'true'); 
    $query = $this->db->get('immun as a')->result(); 

    return $query;  
} 

这是codeigniter交叉连接的正确查询。在我原来的文章中,我没有条件。我在这里找到

https://ellislab.com/codeIgniter/user-guide/database/active_record.html

在部分约加盟。我看到有一个加入条件的地方。一旦我添加了条件。我得到了返回的正确结果集。

1

您可以看到查询CI在数据库中运行。

将下面的代码呈现在使用此查询的页面控制器上:

$this->output->enable_profiler(TRUE); 

这样CI将输出的页面有很多的信息,包括执行的查询结束分析器渲染页面所需的。 这应该有所帮助。

另一个提示是,如果您需要从不同表中选择具有相同名称的列,则必须使用别名。 CI不好处理。