簡體   English   中英

SQL查詢轉換為codeigniter活動記錄

[英]SQL Query conversion into codeigniter active record

請參閱以下查詢。

我想轉換成 CodeIgnitor Active Records。

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

如何在不使用$this->db->query()情況下轉換它?

嘗試使用活動記錄:-

$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();

非常感謝您提前。

如果您真的想這樣做以使 CI 逃避您的查詢,您可能應該拆分您的查詢。

下面我給你舉個例子

$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;

上面的查詢為您返回第一個內部選擇查詢,直到 union all

使用這段代碼,您應該能夠構建您的查詢並獲得您想要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM