2011-01-06 104 views
1
SELECT accounts.NameSurname, Projects.Name, personnels.NameSurname 
FROM accounts 
JOIN projects ON (accounts.Id = projects.AccountId) 
JOIN projectpersonnels ON (projects.Id = projectpersonnels.ProjectId) 
JOIN accounts AS personnels ON (projectpersonnels.AccountId = personnels.Id) 

結果NameSurname名稱NameSurname colums爲什麼CodeIgniter Active Record和phpMyAdmin會給出不同的結果?


爲什麼會上方和下方產生不同的「列」的標題和列數的查詢? 我在phpmyadmin中運行上面的查詢。 使用mysql和笨1.7.3


$this->db->select('accounts.NameSurname,projects.Name,personnels.NameSurname'); 
$this->db->from('accounts'); 
$this->db->join('projects','accounts.Id = projects.AccountId'); 
$this->db->join('projectpersonnels','projects.Id = projectpersonnels.ProjectId'); 
$this->db->join('accounts as personnels','projectpersonnels.AccountId = personnels.Id'); 
$q=$this->db->get(); 

結果:NameSurname(這是人員)姓名(即項目)

謝謝您的閱讀和回覆。

回答

1

它與CI如何創建結果有關。你有名字衝突。 NameSurname都試圖被分配到對象/數組結果中相同的「鍵」。由於personnels.NameSurname是第二個,所以它將覆蓋accounts.NameSurname的值(因爲它被分配給相同的密鑰)。如果您要使用accounts.NameSurname as aNameSurname(並非100%確定這是否是MySQL的正確語法),而不是accounts.NameSurname,這可能會使結果保持一致。

在某些情況下,這實際上也會導致與PDO類相同的問題:FETCH_ASSOCFETCH_OBJ只能顯示兩列,但FETCH_ARRAY會顯示三個。 FETCH_BOTH會導致有三個數字索引和兩個關聯索引。 (不是你問過PDO的問題,但我認爲它可能會進一步說明這一點)。

+0

cwalllenpolle感謝您的回答, $ this-> db-> join('accounts','projectpersonnels.AccountId = personnels.Id','AS personnels'); – anybudy 2011-01-07 08:47:28

+0

謝謝,但他們是同一列,我希望人員成爲賬戶的別名。使用'AS'來指定別名,如下所示: $ this-> db-> join('accounts as personnels','projectpersonnels.AccountId = personnels.Id'); 我看到'LEFT'被提供給activerecord連接函數,嘗試代碼如下: $ this-> db-> join('accounts','projectpersonnels.AccountId = personnels.Id','AS personnels');還沒有工作,它與activerecord別名定義有關嗎?我們如何在activerecord中定義別名,當我使用sql語法(db-> query($ sql))查詢我定義的別名時,它也不工作 – anybudy 2011-01-07 09:10:56

相關問題