【问题标题】:Why are CodeIgniter Active Record and phpMyAdmin giving different results?为什么 CodeIgniter Active Record 和 phpMyAdmin 给出不同的结果?
【发布时间】:2011-01-06 02:32:09
【问题描述】:
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 列


为什么上面和下面的查询会导致不同的“列”标题和列数? 我在 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(即人员) Name(即项目)

感谢您的阅读和回复。

【问题讨论】:

    标签: mysql codeigniter join activerecord


    【解决方案1】:

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

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

    【讨论】:

    • cwalllenpolle 谢谢你的回答,$this->db->join('accounts','projectpersonnels.AccountId = persons.Id','AS 人员');
    • 谢谢,但它们是相同的列,我希望人员是帐户的别名。使用'AS'指定别名如下: $this->db->join('accounts as persons','projectpersonnels.AccountId = persons.Id');我看到 'LEFT' 被提供给 activerecord 加入函数,尝试了下面的代码:也不起作用,它与activerecord别名定义有关?,我们如何在activerecord中定义别名。当我使用sql语法(db->query($sql))进行查询时,因为我定义了别名,它也不起作用跨度>
    猜你喜欢
    • 2014-10-19
    • 2017-04-29
    • 2021-12-07
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多