thinkphp3.2 join複雜連結串列查詢語句(表重新命名/別名)
阿新 • • 發佈:2019-02-13
功能描述:
同一個資料庫的兩張資料表,實現兩張錶鏈表查詢,並且返回指定的幾個欄位名(欄位名跟兩張表的欄位名不一樣),將取到的結果以json格式,返回給安卓前端呼叫
jy_order(訂單表),資料結構如下:
jy_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'];