我有一个从我的数据库获取数据的函数,并加入不同的表。这是方法:
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'
的{{1}};它为'status_id=0'
提供了'status_naam'
。
如果我尝试获取'status_id=1'
的{{1}},那么会发生同样的事情,然后它会从'status_naam'
向我提供'status_id=1'
。
我做错了什么?提前谢谢!
答案 0 :(得分: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'));
答案 1 :(得分: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
如您所见,您在users表上设置了group_id
的索引,
然后将其设置为我们的外键并告诉它引用groups
id。
innodb引擎是必需的&行必须完全匹配。
...希望有道理
答案 2 :(得分:0)
您是否尝试过使用from方法?
$this->db->select...
$this->db->from('bedrijf')
...
$query = $this->db->get()
...