我需要转换为codeigniter3活动记录语法

时间:2019-07-12 09:13:16

标签: sql sql-server codeigniter-3

我需要联接主(4-5)表,并从内部联接表中获取最新信息,以获取项目的当前状态。

  

投资者有很多投资

     

投资有很多investment_details

     

investment_details通过项目状态具有许多状态

Select 
    siv.company_name
    , siv.full_name
    , si.permit_number
    , si.project_name
    , sid.investment_detailed_id
    , sis.project_status_id
    , sps.project_status_name 
    From sma_investors siv 
        Join sma_investments si 
            On siv.investor_id = si.investment_id 
        Join sma_investment_details sid 
            On si.investment_id = sid.investment_id 
        Inner Join sma_investment_status sis 
            On sis.investment_status_id = (
                Select investment_status_id 
                From sma_investment_status s 
                Where s.investment_detailed_id = sid.investment_detailed_id 
                Order BY investment_status_id DESC LIMIT 1) 
        Join sma_project_status sps 
            On sis.project_status_id = sps.project_status_id

这很好用,但我无法将其转换为CI3。

2 个答案:

答案 0 :(得分:0)

使用查询生成器(QB)没有任何优势,除非您由于某些情况需要部分查询以不同的方式编写。如果要自动转义用户输入,则QB也很有用。否则,您只需运行大量额外的代码,这些代码将导致您已经拥有完全相同的SQL语句字符串。

根据您的情况,子选择将使转换更加难以完成,并增加了许多额外的代码要执行。

我的建议是保持简单,并使用db->query(),例如

$sql = "Select siv.company_name, siv.full_name, si.permit_number, si.project_name
    , sid.investment_detailed_id, sis.project_status_id, sps.project_status_name 
    From sma_investors siv 
        Join sma_investments si On siv.investor_id = si.investment_id 
        Join sma_investment_details sid On si.investment_id = sid.investment_id 
        Inner Join sma_investment_status sis On sis.investment_status_id = (
            Select investment_status_id From sma_investment_status s 
            Where s.investment_detailed_id = sid.investment_detailed_id 
            Order BY investment_status_id DESC LIMIT 1) 
        Join sma_project_status sps On sis.project_status_id = sps.project_status_id";

$query = $this->db->query($sql);
if(! $query)  // might be false if query fails
{
    return null;
}

return $query->row();  // one row of data

答案 1 :(得分:0)

我终于想出了自己的解决方案,并坚持使用QB编码标准,并且按预期运行

 $q = $this->db->select('*')
            ->from('investors')
            ->join('investments', `enter code here`'investors.investor_id=investments.investment_id')
            ->join('investment_details as sid', 'investments.investment_id=sid.investment_id')
            ->join('investment_status', 'investment_status.investment_status_id=(select '.$this->db->dbprefix('investment_status').'.investment_status_id from '.$this->db->dbprefix('investment_status').' where  '.$this->db->dbprefix('investment_status').'.investment_detailed_id=sid.investment_detailed_id order by  '.$this->db->dbprefix('investment_status').'.investment_status_id Desc limit 1)', 'inner')
            ->join('project_status', 'investment_status.project_status_id=project_status.project_status_id')
            ->where('sid.company_type_id', 1)
            ->order_by('investments.investment_id', 'desc')
            ->limit(5)
            ->get();
相关问题