thinkphp3.2 join复杂链表查询语句(表重命名/别名)

功能描述:
同一个数据库的两张数据表,实现两张表链表查询,并且返回指定的几个字段名(字段名跟两张表的字段名不一样),将取到的结果以json格式,返回给安卓前端调用

jy_order(订单表),数据结构如下:
thinkphp3.2 join复杂链表查询语句(表重命名/别名)_第1张图片
jy_scan_record(扫描记录表),数据结构如下:
thinkphp3.2 join复杂链表查询语句(表重命名/别名)_第2张图片

    /**
     * 扫描记录 只读接口
     * @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//     $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'];

你可能感兴趣的:(thinkphp)