1. 程式人生 > >thinkphp3.2 join複雜連結串列查詢語句(表重新命名/別名)

thinkphp3.2 join複雜連結串列查詢語句(表重新命名/別名)

功能描述:
同一個資料庫的兩張資料表,實現兩張錶鏈表查詢,並且返回指定的幾個欄位名(欄位名跟兩張表的欄位名不一樣),將取到的結果以json格式,返回給安卓前端呼叫

jy_order(訂單表),資料結構如下:
jy_order 訂單表
jy_scan_record(掃描記錄表),資料結構如下:
_scan_record 掃描記錄表

    /**
     * 掃描記錄 只讀介面
     * @param {string} $uid 使用者uid
     * @return {json} $list 掃描記錄json陣列
    */
    public function scanRecord(){

        $tmp = file_get_contents("php://input"
); $arr = json_decode($tmp,true); $uid = $arr['uid']?$arr['uid']:I('uid'); $ScanRecord = M('ScanRecord'); /*分表查詢 對比效能優先(如果資料量大,伺服器效能能耗太大,所以改用連結串列查詢,聽說而已,還沒親身驗證過...以後有時間補充驗證下) */ // $list = $ScanRecord->where(array('uid'=>$uid))->field('item_id,order_id,location,created'
)
->
order('created desc')->limit(10)->select(); // $Order = M('Order'); // for($i=0;$i<sizeof($list);$i++){ // $list[$i]['item_name'] = $Order->where(array('id'=>$list[$i]['order_id']))->getField('name'); // } //連結串列查詢 對比效能優先 $list = $ScanRecord ->
join('jy_order on jy_scan_record.order_id = jy_order.id')->where(array('uid'=>$uid)) ->field(array('jy_order.name'=>'item_name','jy_scan_record.item_id'=>'item_id','jy_scan_record.order_id'=>'order_id','jy_order.name'=>'item_name','jy_scan_record.location'=>'location','jy_scan_record.created'=>'created'))->select(); if(!$list) $this->error('無掃描記錄'); $this->success($list,"成功",1); }

注意事項:
1、thinkphp 連結串列查詢的時候(join等操作),資料表名必須填全名,自己測試過用簡寫的 別名 簡化操作 ,結果報錯。無奈只能用全名;
2、filed()取欄位的值,賦值給自定義的欄位名,以自定義的欄位名儲存資料到結果中。例如:

'jy_order.name'=>'item_name'
//取jy_order表的 name 欄位,改欄位名為 item_name,儲存到結果陣列中

如果想取結果陣列中item_name欄位的值,只需要:

echo $list[0]['item_name'];