简体   繁体   English

SQL查询转换为codeigniter活动记录

[英]SQL Query conversion into codeigniter active record

Please see the following query.请参阅以下查询。

I want to convert into CodeIgnitor Active Records.我想转换成 CodeIgnitor Active Records。

SQL QUERY: SQL 查询:

Select MobNo,Caller,Sum(Tot_In_Call) as Tot_In_Call,Called,Sum(Tot_Out_Call) as Tot_Out_Call
From (

    SELECT CTE.Caller as MobNo,Incall.Caller,Incall.Tot_In_Call, Null as Called,0 as Tot_Out_Call
    FROM Call_Details CTE
    Left Join (
            Select Count(Called) as Tot_In_Call,Caller,Called
            from call_details 
            Group By Caller,Called
    ) InCall on (Cte.caller = InCall.Called) 
    Where InCall.Called in($call_array) 
    Group BY CTE.Caller,Incall.Caller,Incall.Tot_In_Call

    Union All

    SELECT CTE.Caller as MobNo,Null as Caller,Null as Tot_In_Call, OutCall.Called,OutCall.Tot_Out_Call
    FROM Call_Details CTE
    Left Join (
            Select Count(Called) as Tot_Out_Call,caller,Called
            from call_details 
            group by caller,called
    ) OutCall on (CTE.caller = OutCall.caller And cte.called = OutCall.called) 
    Where CTE.Caller in($call_array) 
    Group BY CTE.Caller,OutCall.Called,OutCall.Tot_Out_Call

) As Qry
WHERE Qry.MobNo in($call_array)
Group By Qry.MobNo,Qry.Caller,Qry.Called
order by Qry.MobNo,Qry.Caller,Qry.Called

How can I convert this without using $this->db->query() ?如何在不使用$this->db->query()情况下转换它?

Tried to make using active record:-尝试使用活动记录:-

$this->db->select("MobNo,Caller,Sum(Tot_In_Call) as Tot_In_Call,Called,Sum(Tot_Out_Call) as Tot_Out_Call");
$this->db->from("SELECT CTE.Caller as MobNo,Incall.Caller,Incall.Tot_In_Call, Null as Called,0 as Tot_Out_Call
    FROM Call_Details CTE
    Left Join (
            Select Count(Called) as Tot_In_Call,Caller,Called
            from call_details 
            Group By Caller,Called
    ) InCall on (Cte.caller = InCall.Called) 
    Where InCall.Called in($call_array) 
    Group BY CTE.Caller,Incall.Caller,Incall.Tot_In_Call

    Union All

    SELECT CTE.Caller as MobNo,Null as Caller,Null as Tot_In_Call, OutCall.Called,OutCall.Tot_Out_Call
    FROM Call_Details CTE
    Left Join (
            Select Count(Called) as Tot_Out_Call,caller,Called
            from call_details 
            group by caller,called
    ) OutCall on (CTE.caller = OutCall.caller And cte.called = OutCall.called) 
    Where CTE.Caller in($call_array) 
    Group BY CTE.Caller,OutCall.Called,OutCall.Tot_Out_Call");
$this->db->where_in("MobNo",$call_array);
$this->db->group_by("MobNo,Caller,Called");
$this->db->order_by("MobNo,Caller,Called","ASC");
$this->db->get();

Thank you a lot in advance.非常感谢您提前。

If you really want to do that in order to get CI to escape your Queries, you should probably split your queries.如果您真的想这样做以使 CI 逃避您的查询,您可能应该拆分您的查询。

Below i give you an example下面我给你举个例子

$strQuery = $this->db
    ->select("Count(Called) as Tot_In_Call,Caller,Called", false)
    ->from("call_details")
    ->group_by("Caller,Called")
    ->get_compiled_select();

$strQuery = "(".$strQuery.") InCall";

$strQuery = $this->db
    ->select("CTE.Caller as MobNo,Incall.Caller,Incall.Tot_In_Call, Null as Called,0 as Tot_Out_Call", false)
    ->from("Call_Details CTE")
    ->join($strQuery,"Cte.caller = InCall.Called","left",false)
    ->where_in("InCall.Called", $call_array)
    ->group_by("CTE.Caller,Incall.Caller,Incall.Tot_In_Call")
    ->get_compiled_select();

echo $strQuery;

The query above gives you back the first inner select query until union all上面的查询为您返回第一个内部选择查询,直到 union all

With this piece of code you should be able to build your query and get what you want使用这段代码,您应该能够构建您的查询并获得您想要的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM