codeigniter中表别名中的问题

问题描述 投票:1回答:2

这里,我正在为内部选择创建别名,但是会自动将表前缀添加到别名表。我的SQL查询如下:

SELECT
    `tb1`.*, `tb2`.*, `tb3`.`client_name`,
    `cms_tb4`.*,  `tb1`.`project_status` AS pstat
FROM
    (`cms_projects` tb1)
JOIN  `cms_project_type` tb2 ON `tb2`.`id` = `tb1`.`project_type`
JOIN  `cms_clients` tb3 ON `tb1`.`client_id` = `tb3`.`client_id`
JOIN  (
    SELECT
        *
    FROM
        (
            SELECT
                t1.project_id AS projid,
                 t2.work_id,
                t2.work_date
            FROM
                cms_projects_mod t1,
                cms_work_status_emp  t2
            WHERE
                t1.module_id = t2.pro_module_id
            ORDER BY
                t2.work_date DESC
        )  AS subtb4
    GROUP BY
        projid
    ORDER BY
        work_date DESC
) AS tb4 ON  `cms_tb4`.`projid` = `tb1`.`project_id`
LIMIT 50

我正在研究Codeigniter框架。


在像这样的代码点火器模型中

         $this->db->select('tb1.*');
                $this->db->select('tb1.project_status as pstat');
                $this->db->from('cms_projects tb1');
               $this->db->join('project_type tb2', 'tb2.id=tb1.project_type');
             $this->db->join('clients tb3', 'tb1.client_id = tb3.client_id');
            $this->db->join("(
                       select * from (
              select t1.project_id as projid,                                     t2.work_id,t2.work_date from cms_projects_mod t1, cms_work_status_emp t2  where  t1.module_id = t2.pro_module_id order by  t2.work_date desc) as subtb4 
 group by  projid  order by  work_date desc ) as tb4 ",
"tb4.projid = tb1.project_id" ,false);
      $this->db->group_by("tb1.project_id");
            $this->db->order_by("tb3.work_date",'desc');

这里我没有在第三个连接tb4中给出任何前缀,但是CI在运行时会自动添加。

mysql codeigniter alias
2个回答
0
投票

请检查CodeIgniter文档中的代码顺序。

$this->db
   ->select()
   ->from()
   ->join()

这是正确的顺序。更改顺序有时会导致复杂查询中出现问题。

访问此链接https://github.com/bcit-ci/CodeIgniter/issues/2975


-1
投票

为什么使用查询字符串?如果您使用coeignoter,为什么不使用活动记录。 Active Record查询通过sql注入自动保护。您可以执行这种操作。...不一样,您只是想知道如何使用活动记录sql。

$query = $this->db->select('*',FALSE)
                  ->from('tb1','tb2'.....)
                  ->join('tb2', 'tb1.cms_project_type = tb2.cms_project_type','left')
                  ->join('tb3', 'tb1.cms_project_type = tb2.cms_project_type','left')
                  ->group_by('projid')  
                  ->order_by('work_date','DESC') 
                  ->get();

https://ellislab.com/codeigniter/user-guide/database/queries.html

希望获得帮助。

© www.soinside.com 2019 - 2024. All rights reserved.