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'];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值