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(人员)名称(项目)
感谢您阅读和回复。
答案 0 :(得分:1)
它与CI如何创建结果有关。你有一个名字冲突。两个NameSurname
都试图分配给对象/数组结果中的相同“键”。由于personnels.NameSurname
是第二个,因此它会覆盖accounts.NameSurname
的值(因为它被分配给同一个键)。如果您使用accounts.NameSurname as aNameSurname
(不是100%确定这是否是MySQL的正确语法)而不是accounts.NameSurname
,这可能会使您的结果保持一致。
在某些情况下,这实际上会导致PDO类出现同样的问题:FETCH_ASSOC
和FETCH_OBJ
都只会显示两列,但FETCH_ARRAY
会显示三列。 FETCH_BOTH
会导致三个数字索引和两个关联索引。 (不是你问过PDO,但我认为这可能会进一步说明这一点。)