[英]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.