我正在構建一個涉及JOIN的查詢。這是我第一次用Active Record完成數據庫的工作,並且遇到了一些問題。JOIN語句中的CodeIgniter ActiveRecord字段名稱
我想加入的表中調用companies
到users
表,所以我可以得到公司等用戶中的名字,我已經做了這種成功,像這樣:
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';
這是偉大的,但如果我這樣做,在活動記錄我認爲這是實踐中相當差,如果它工作的話。
我想我可能不得不訴諸這一點,但我並不確定自己能夠選擇那樣。我如何給我的例子表格添加別名,比如' - > get('user AS u')'?這是否與所有activerecord數據庫目標兼容? – deed02392 2012-04-06 20:46:04
@ deed02392檢查,更新代碼 – safarov 2012-04-06 20:54:26
好吧,就像我想的那樣。 'AS'運算符是標準的SQL權限,它在所有db語言中設置別名?或者這隻能在certiain db中工作。 – deed02392 2012-04-07 11:35:06