【问题标题】:Codeigniter joined tables getting wrong outputCodeigniter 连接表得到错误的输出
【发布时间】:2011-12-16 12:35:10
【问题描述】:

我有一个从我的数据库中获取数据并连接不同表的函数。方法是这样的:

public function getCallcenterCall() {
    $this->db->select('bedrijf.*, status.status_naam, quickscan.datum_verzonden');
    $this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id');
    $this->db->join('status', 'bedrijf.status = status.status_id');
    $this->db->where('status', '0');

    $query = $this->db->get('bedrijf');

    return $query->num_rows() > 0 ? $query-> result_array() : FALSE;
}

在表格状态中,我得到了 3 行:'id''status_id''status_naam'。在我看来,我输出了status_naam,但这里出错了。

而不是给我属于'status_id=0''status_naam';它给了我'status_naam''status_id=1'

如果我尝试为'status_id=1' 获取'status_naam',则会发生同样的事情,然后它会从'status_id=2' 给我'status_naam'

我做错了什么?提前致谢!

【问题讨论】:

    标签: php codeigniter join


    【解决方案1】:

    您的数据库设置是否使用外键约束?

    简单示例:

    表格

    create table `groups`(
    `id` int(10) unsigned not null auto_increment primary key,
    `name` varchar(30) not null,
    `colour` varchar(7) not null,
    `created_at` datetime not null,
    `updated_at` datetime not null
     )engine=innodb;
    
    
    create table `users`(
    `id` int(10) unsigned not null auto_increment primary key,
    `group_id` int(10) unsigned not null,
    `permissions` varchar(255) not null default '{[u, r, d]}',
    `created_at` datetime not null,
    `updated_at` datetime not null,
    index(group_id),
    foreign key(group_id) references groups(id)
    )engine=innodb;
    

    原始 SQL

    select g.name, u.permissions from users as u
    left join groups as g
    on g.id = u.group_id
    where id=1
    

    如您所见,您在 users 表上设置了 group_id 的索引, 然后将其设置为我们的外键并告诉它引用groups id。

    innodb 引擎是必需的,并且行必须完全匹配。

    ...希望这是有道理的

    【讨论】:

    • 你是对的,我的状态是 endum,我的 status_id 是 int。这解决了问题,谢谢!
    【解决方案2】:

    我想你可能需要使用join的第三个参数,例如

    $this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id', 'inner');
    $this->db->join('status', 'bedrijf.status = status.status_id', 'inner');
    


    如果仍然失败,您可能不得不使用自定义查询:

    $s  = 'SELECT ';
    $s .=    'bedrijf.*, status.status_naam, quickscan.datum_verzonden ';
    $s .= 'FROM bedrijf ';
    $s .= 'INNER JOIN quickscan ON bedrijf.id = quickscan.bedrijf_id ';
    $s .= 'INNER JOIN status ON bedrijf.status = status.status_id ';
    $s .= 'WHERE (status = ?)';
    
    $query = $this->db->query($s, array('0'));
    

    【讨论】:

      【解决方案3】:

      你试过使用 from 方法吗?

      $this->db->select...
      $this->db->from('bedrijf')
      ...
      $query = $this->db->get()
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        • 2015-02-11
        • 2017-10-22
        • 1970-01-01
        相关资源
        最近更新 更多