【问题标题】:Codeigniter join statement with a join statement带有连接语句的 Codeigniter 连接语句
【发布时间】:2017-03-31 22:46:19
【问题描述】:

我在 codeigniter 框架中将以下语句转换为我的模型上的代码时遇到问题。

SELECT mt_prs_groups.groupId, mt_prs_groups.groupName, mt_prs_administrators.administratorId
FROM mt_prs_status INNER JOIN (mt_prs_administrators INNER JOIN mt_prs_groups ON mt_prs_administrators.administratorId = mt_prs_groups.administratorId) ON (mt_prs_status.statusId = mt_prs_groups.statusId) AND (mt_prs_status.statusId = mt_prs_administrators.statusId)
WHERE (((mt_prs_status.status)="Active") AND ((mt_prs_administrators.administratorId)=3)) OR (((mt_prs_administrators.administratorId)=4));

在我已将其翻译成的模型上

$this->db->select('mt_prs_groups.groupId, mt_prs_groups.groupName');
$this->db->from('mt_prs_status');
$this->db->join('mt_prs_administrators', 'inner');
$this->db->join('mt_prs_groups', 'mt_prs_administrators.administratorId = mt_prs_groups.administratorId AND mt_prs_status.statusId = mt_prs_administrators.statusId', 'inner');
$this->db->where('mt_prs_status.status="Active"');
$this->db->where('mt_prs_administrators.administratorId=3');
$this->db->or_where('mt_prs_administrators.administratorId=4');

这给了我下面的错误

错误号:1054

'from 子句'中的未知列'inner'

选择mt_prs_groups.groupId, mt_prs_groups.groupName FROM mt_prs_status 加入 mt_prs_administrators 使用 (inner) 内部 加入mt_prs_groups 开启mt_prs_administrators.administratorId = mt_prs_groups.administratorId AND mt_prs_status.statusId = mt_prs_administrators.statusId 其中mt_prs_status.status = “活动” AND mt_prs_administrators.administratorId = 3 或 mt_prs_administrators.administratorId = 4

当我将它直接放在mysql上时查询运行良好,但在codeigniter中失败。问题是内连接依赖于另一个内连接

【问题讨论】:

    标签: php mysql codeigniter select inner-join


    【解决方案1】:

    请试试这个格式

     $this->db->select('tbl_tasks.task_id,tbl_tasks.task, tbl_assign_task.user_id');
            $this->db->from(TBL_TASKS);
            $this->db->join(TBL_ASSIGN_TASK, 'tbl_tasks.task_id = tbl_assign_task.task_id');
            $this->db->where('tbl_assign_task.is_deleted', 0);
             $this->db->where('tbl_assign_task.user_id', $userId);
            $query = $this->db->get();
    

    【讨论】:

    • 事情是它的连接中的连接。 mt_prs_status 正在加入另一个 join 语句
    【解决方案2】:

    在这一行 - "$this->db->join('mt_prs_administrators', 'inner');"你没有定义加入条件,这就是为什么你得到一个错误,因为 CI 中的加入格式是 - $this->db->join('table_name', '我们应用连接的列名', '连接类型');

    【讨论】:

    • 问题是我如何将该查询写入codeigniter。 mt_prs_status 加入另一个连接语句这个(mt_prs_administrators INNER JOIN mt_prs_groups ON mt_prs_administrators.administratorId = mt_prs_groups.administratorId) ON (mt_prs_status.statusId = mt_prs_groups.statusId) AND (mt_prs_status.statusId = mt_prs_administrators.statusId) 并且在这个第二个语句中是一个连接。所以问题不在于错误本身,而在于我如何纠正该陈述
    • 请看语句并尝试将其写入codeigniter
    【解决方案3】:

    请试试这个。我在codeigniter中试过这个

    $this->db->select('mt_prs_groups.groupId, mt_prs_groups.groupName');
    $this->db->from('mt_prs_status');
    $this->db->join('mt_prs_administrators', 'mt_prs_status.statusId = mt_prs_administrators.statusId','inner');
    $this->db->join('mt_prs_groups', 'mt_prs_administrators.administratorId = mt_prs_groups.administratorId', 'inner');
    $this->db->where('mt_prs_status.status="Active"');
    $this->db->where('mt_prs_administrators.administratorId=3');
    $this->db->or_where('mt_prs_administrators.administratorId=4');
    

    【讨论】:

    • 这是为我做的...非常感谢。我知道我的查询哪里出错了
    • 快乐是我的 :)
    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2017-09-26
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多