我正在构建一个涉及JOIN的查询。这是我第一次使用Active Record完成数据库操作,我遇到了一些麻烦。
我想将一个名为companies
的表加入users
表,这样我就可以得到用户所在公司的名称等等。我已经成功完成了这样的事情:< / p>
function get_profile_by_username($username)
{
$this->db->join('companies', $this->table_name.'.company_id = companies.id');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1) return $query->row();
return NULL;
}
但问题是companies
中的字段id
和name
在该对象中返回,简称为name
。
通常,当我编写原始查询时,我会给表提供别名,结果类似于u.company_id
,c.name
。所以我知道name
与用户无关,但当然是公司的名称。虽然现在不是问题,但可能在未来,id
列显然不能在结果集中共存,因此会被覆盖!
我们如何才能区分某些表格中的字段?或者是否有更好的方法来进行表连接并使用连接的查询数据集/对象?
编辑:
如果我将其作为原始查询执行,我会这样做:
SELECT u.id, u.username, c.name
FROM users AS u
JOIN companies AS c
ON c.id = u.company_id
WHERE u.username = 'foobar';
哪个好,但是如果我在活动记录中尝试这样做的话,我认为这种做法很糟糕,如果它可以的话。
答案 0 :(得分:37)
如果要从表格中选择某些特定列,请使用db->select()
。您可以为表提供别名,添加一些条件等。发送第二个参数FALSE
以不转义特殊字符。
$this->db->select('u.id, u.username, c.name', false);
$this->db->from('user as u');
$this->db->join('companies as c', 'u.company_id = c.id');
$this->db->where('LOWER(u.username)=', strtolower('foobar'));
$query = $this->db->get();
答案 1 :(得分:0)
$this->db->select('ut.nombre as nombreu, ut.apellido, ru.nombre as nombrer');
$this->db->from('User_table ut');
$this->db->join('Role_usuario ru', 'ut.role_user = ru.Id');
$query = $this->db->get();`
`