您的位置:首页 > 编程语言 > PHP开发

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

2017-07-25 15:32 357 查看
功能描述:

同一个数据库的两张数据表,实现两张表链表查询,并且返回指定的几个字段名(字段名跟两张表的字段名不一样),将取到的结果以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'];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp 数据库 链表