为什么CodeIgniter Active Record和phpMyAdmin会给出不同的结果?

时间:2011-01-06 02:32:09

标签: mysql codeigniter join activerecord

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 Name NameSurname colums


为什么上面和下面的查询会产生不同的“列”标题和列数? 我在phpmyadmin中运行上面的查询。 使用mysql和codeigniter 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 个答案:

答案 0 :(得分:1)

它与CI如何创建结果有关。你有一个名字冲突。两个NameSurname都试图分配给对象/数组结果中的相同“键”。由于personnels.NameSurname是第二个,因此它会覆盖accounts.NameSurname的值(因为它被分配给同一个键)。如果您使用accounts.NameSurname as aNameSurname(不是100%确定这是否是MySQL的正确语法)而不是accounts.NameSurname,这可能会使您的结果保持一致。

在某些情况下,这实际上会导致PDO类出现同样的问题:FETCH_ASSOCFETCH_OBJ都只会显示两列,但FETCH_ARRAY会显示三列。 FETCH_BOTH会导致三个数字索引和两个关联索引。 (不是你问过PDO,但我认为这可能会进一步说明这一点。)

相关问题