2015-02-11 154 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不好處理。