Codeigniter联接查询失败


Codeigniter join query failing

我正试图在codeigniter 2.2中执行此查询。我阅读了文档http://www.codeigniter.com/user_guide/database/results.html.

我的控制器代码是这个

            $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返回相同的合并数据集,那就太好了。我可以看到,它只是为immun返回表查询,而CI不是从另一个表联接数据。我在哪里读到CI不是为处理复杂查询而构建的吗?这是真的吗?

你知道如何获得我需要的数据吗?谢谢

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

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

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

通过这种方式,CI将在页面末尾输出一个探查器,其中包含大量信息,包括呈现页面所需的已执行查询。这应该会有所帮助。

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

     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

在关于join的部分中。我看到有一个加入条件的地方。一旦我添加了条件。我得到了正确的结果集。