【问题标题】:I need to convert to codeigniter3 active record syntax我需要转换为 codeigniter 3 activerecord 语法
【发布时间】:2019-07-12 09:13:16
【问题描述】:

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

投资者有很多投资

投资有很多投资细节

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。

【问题讨论】:

  • 这与 SQL Server 有什么关系,除了“最初编写代码的地方”?您将其转换为 Code Igniter 时遇到了哪些具体问题?
  • 是的,我想将其转换为 codeigniter3 查询生成器
  • 到目前为止您尝试了哪些方法,结果如何?

标签: sql sql-server codeigniter-3


【解决方案1】:

使用查询生成器 (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

【讨论】:

  • 我同意你的建议,我想出了自己的解决方案
【解决方案2】:

我终于想出了自己的解决方案,并坚持 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();

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多