2011-12-16 11 views
2

私のデータベースからデータを取得し、別のテーブルに結合する関数があります。これはメソッドです:'id''status_id''status_naam'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行を得ました。私の見解では、status_naamを出力しますが、ここでは間違っています。代わりに私に'status_id=0'に属し'status_naam'を与える

。それは私に'status_naam''status_id=1'を与える。

'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

0

あなたがメソッドから使​​用してみましたか?

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

はい、試しましたが動作しませんでした。 – Augus

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'));