2011-12-16 125 views
2

我有一個函數,它從我的數據庫獲取數據,並加入不同的表。這是方法:Codeigniter加入表錯誤輸出

public function getCallcenterCall() { 
    $this->db->select('bedrijf.*, status.status_naam, quickscan.datum_verzonden'); 
    $this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id'); 
    $this->db->join('status', 'bedrijf.status = status.status_id'); 
    $this->db->where('status', '0'); 

    $query = $this->db->get('bedrijf'); 

    return $query->num_rows() > 0 ? $query-> result_array() : FALSE; 
} 

在表中的地位我得到3行:'id''status_id''status_naam'。在我看來,我輸出了status_naam,但這裏出錯了。

而不是給我'status_naam'屬於'status_id=0';它給了我'status_naam'其中'status_id=1'

同樣的事情發生,如果我試圖得到'status_naam''status_id=1'然後它給了我'status_naam''status_id=2'

我在做什麼錯?提前致謝!

回答

1

是您的數據庫設置爲使用外鍵約束?

簡單的例子:

create table `groups`(
`id` int(10) unsigned not null auto_increment primary key, 
`name` varchar(30) not null, 
`colour` varchar(7) not null, 
`created_at` datetime not null, 
`updated_at` datetime not null 
)engine=innodb; 


create table `users`(
`id` int(10) unsigned not null auto_increment primary key, 
`group_id` int(10) unsigned not null, 
`permissions` varchar(255) not null default '{[u, r, d]}', 
`created_at` datetime not null, 
`updated_at` datetime not null, 
index(group_id), 
foreign key(group_id) references groups(id) 
)engine=innodb; 

原始SQL

select g.name, u.permissions from users as u 
left join groups as g 
on g.id = u.group_id 
where id=1 

正如你可以看到你的用戶表中設定的group_id索引, 然後將其設置爲我國外交鍵並告訴它參考groups ID。

innodb引擎是必需的&行必須匹配相同。

...希望有道理

+0

你說得對,我的狀態是endum,我的status_id是int。這解決了這個問題,謝謝! – Augus 2011-12-20 12:38:31

0

您是否嘗試過使用from方法?

$this->db->select... 
$this->db->from('bedrijf') 
... 
$query = $this->db->get() 
... 
+0

是試過了,但沒有奏效。 – Augus 2011-12-16 12:50:24

1

我想你可能需要使用第三個參數join,例如,

$this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id', 'inner'); 
$this->db->join('status', 'bedrijf.status = status.status_id', 'inner'); 


如果還是失敗,你可能不得不去使用自定義查詢,而不是:

$s = 'SELECT '; 
$s .= 'bedrijf.*, status.status_naam, quickscan.datum_verzonden '; 
$s .= 'FROM bedrijf '; 
$s .= 'INNER JOIN quickscan ON bedrijf.id = quickscan.bedrijf_id '; 
$s .= 'INNER JOIN status ON bedrijf.status = status.status_id '; 
$s .= 'WHERE (status = ?)'; 

$query = $this->db->query($s, array('0'));