我从数据库里面查出来很多数据,都是一条一条的,是一个二维数组,格式如下:

Array

(

[0] => Array

(

[id] => 29

[user_id] => 1

[car_no] => 234567

)

[1] => Array

(

[id] => 21

[user_id] => 1

[car_no] => 23565

)

[2] => Array

(

[id] => 23

[user_id] => 1

[car_no] => 12345

)

[3] => Array

(

[id] => 28

[user_id] => 1

[car_no] => 124455

)

[4] => Array

(

[id] => 6

[user_id] => 1

[car_no] => 12345

)

[5] => Array

(

[id] => 7

[user_id] => 2

[car_no] => 22

)

[6] => Array

(

[id] => 3

[user_id] => 2

[car_no] => 粤T863

)

[7] => Array

(

[id] => 25

[user_id] => 3

[car_no] => 12345

)

);

我要怎么做才能把user_id为同一个的进行归类呢?弄成格式如下:

Array

(

[0] => Array

(

[user_id] => 8

[login] => 18620982882

[car_no] => Array

(

[0] => 粤A123

)

)

[1] => Array

(

[user_id] => 7

[login] =>

[car_no] => Array

(

[0] => 粤T456

[1] => 123456

)

)

[2] => Array

(

[user_id] => 2

[login] => 13318029123

[car_no] => Array

(

[0] => 粤T863

[1] => 22

)

)

[3] => Array

(

[user_id] => 1

[login] => 15088138542

[car_no] => Array

(

[0] => 12345

[1] => 23565

[2] => 12345

[3] => 124455

[4] => 234567

)

)

)

我的做法如下,达到目的,但是感觉效率太低:

//先把id去重组成一个数组,计算需要处理的$data的子数组个数,然后遍历,如果user_id与去重后的那个数组的键值相同,就把这个值存到新数组里面去,组成一个新的二维数组。

private function group_sort($unique, $num, $data) {

foreach ($unique as $key => $value) {

for ($i = 0; $i < $num; $i++) {

if ($data[$i]['user_id'] == $value) {

$data_format[$key]['user_id'] = $data[$i]['user_id'];

$data_format[$key]['login'] = $data[$i]['login'];

$data_format[$key]['car_no'][] = $data[$i]['car_no'];

}

}

}

return $data_format;

}

有没有方法可以直接从数据库查出来就这样好了?另外,这里面那个login是要从用户表里面查询,车辆表里面只有user_id与用户表相关联。做出来还要分页,我是准备用array_chunk来分割数组。请高手支招。

完整代码如下:

/**

* 获取完整或者查询用户信息接口

* @desc 后台查询用户信息,可以根据登录名,手机号,邮箱号,车牌号等查询,不传查询参数表示获取全部用户信息

* @param search string N N 需要搜索的条件,可以是登录名,手机号,邮箱号,车牌号,例如:123,不传参数表示获取全部

* @return int code 操作码,200表示成功,其他表示没有查到数据

* @return string data.login 登录名,是二维数组下标

* @return string data.car_no 车牌号,是二维数组下标

*/

public function searchUserInfo() {

$search = $this->input->post('search');

//如果没有传查询参数,就查询全部,并分页

if (empty($search)) {

$pageSize = (int) $this->input->post('page_size') > 0 ? (int) $this->input->post('page_size') : 100;

$pageNo = (int) $this->input->post('pageNo') > 0 ? (int) $this->input->post('pageNo') : 1;

$field = 'id, user_id, car_no';

$where = array(

'id>' => 0,

);

$result = $this->CarManageModel->my_listPager($this->CarManageModel->table, $where, $field, $pageNo, $pageSize, '', 'user_id ASC', '', 'user_id');

// $query=$this->db->last_query();

// $this->outPutJson(200, array($query));

echo "

";

print_r($result);

echo "

";

exit;

$this->outPutJson(200, $result);

}

// 如果传参了,就根据电话号码或者车牌号码查询

//根据电话号码查询

$this->db->select('id');

$this->db->like('mobile', $search);

$result_1 = $this->db->get('user')->result_array();

$result_1 = array_column($result_1, 'id');

//根据车牌号码查询

$this->db->select('user_id');

$this->db->like('car_no', $search);

$result_2 = $this->db->get('car_info')->result_array();

$result_2 = array_column($result_2, 'user_id');

$result = array_merge($result_1, $result_2);

if (!empty($result)) {

$this->db->select('user_id,login,car_no');

$this->db->from('car_info');

$this->db->join('user', 'car_info.user_id = user.id', 'left');

$this->db->where_in('car_info.user_id', $result);

$data = $this->db->get()->result_array();

$num = count($data);

$data_user_id = array_unique(array_column($data, 'user_id'));

$data_format = $this->group_sort($data_user_id, $num, $data);

echo "

";

print_r($data_format);

echo "

";

exit;

if ($data_format) {

$this->outPutJson(200, $data_format);

}

$this->outputJson(500);

}

}

private function group_sort($unique, $num, $data) {

foreach ($unique as $key => $value) {

for ($i = 0; $i < $num; $i++) {

if ($data[$i]['user_id'] == $value) {

$data_format[$key]['user_id'] = $data[$i]['user_id'];

$data_format[$key]['login'] = $data[$i]['login'];

$data_format[$key]['car_no'][] = $data[$i]['car_no'];

}

}

}

return $data_format;

}

数据库表结构如下:

车辆信息表

CREATE TABLE `car_info` (

`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',

`user_id` bigint(11) unsigned NOT NULL DEFAULT '0' COMMENT '后台用户id',

`car_type_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '车型id,从第三方库获取',

`car_no_type` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '车牌号码类型,粤A粤B等',

`car_no` varchar(10) NOT NULL DEFAULT '' COMMENT '车牌号码',

`frame_no` varchar(8) NOT NULL DEFAULT '' COMMENT '车架号码后6位',

`engine_no` varchar(8) NOT NULL DEFAULT '' COMMENT '发动机号后6位',

`remark` varchar(200) NOT NULL DEFAULT '' COMMENT '车辆备注',

`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否启用',

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

`is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '软删除',

PRIMARY KEY (`id`),

KEY `idx_user_id` (`user_id`),

KEY `idx_status` (`status`),

KEY `idx_is_deleted` (`is_deleted`)

) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 COMMENT='用户车辆信息,一个用户可添加多个';

用户表:

CREATE TABLE `user` (

`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',

`login` varchar(50) NOT NULL DEFAULT '' COMMENT '用于登录,用户名/手机号/邮件',

`password` varchar(50) NOT NULL DEFAULT '' COMMENT '登录密码',

`nickname` varchar(50) NOT NULL DEFAULT '' COMMENT '昵称或者显示的用户名',

`email` varchar(50) NOT NULL DEFAULT '' COMMENT '邮件地址',

`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码',

`reg_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '注册类型,1为手机,2为微信,3为email',

`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否启用',

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

`is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '软删除',

PRIMARY KEY (`id`),

KEY `idx_login` (`login`),

KEY `idx_mobile` (`mobile`),

KEY `idx_status` (`status`),

KEY `idx_is_deleted` (`is_deleted`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='用户表';

mysql一对多分类_mysql一对多结果归类相关推荐

  1. mysql一对多查询_MySQL 一对多查询

    导语 这次要实现的是一对多查询,使用 MySQL 的 group_concat 函数实现. group_concat 简单来说,这个函数的作用就是连接多个字段,函数的具体详解可以看这篇文章. 数据表 ...

  2. MySQL数据库sql分类_mysql数据库常用sql的分类整理

    **************************************************************************************************** ...

  3. mysql自定义收藏分类_MYSQL中SHOW的使用整理收藏

    a. show tables或show tables from database_name; //显示当前数据库中所有表的名称 b. show databases; //显示mysql中所有数据库的名 ...

  4. mysql命令的分类_MySQL常用命令分类汇总

    一.查询状态类 1.查看当前有哪些数据库? mysql> show databases; 2.查看当前数据库有哪些表? mysql> use  database1; mysql> s ...

  5. mysql 存储过程 无限分类_mysql存储过程实现无限分类

    DROP TABLE IF EXISTS `pcms_channel`; CREATE TABLE IF NOT EXISTS `pcms_channel` ( `cid` tinyint(3) un ...

  6. mysql 获取子分类_MySQL 自定义函数获取一个分类的无限级子分类

    本方法不易维护,建议取出数据,在程序中递归,例如 https://javascript.net.cn/article?id=654 代码如下:delimiter / DROP FUNCTION IF ...

  7. MySQL外键关联(一对多)MySQL连接查询

    MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...

  8. 吴恩达机器学习--多类别分类:一对多

    多类别分类:一对多 我们将谈到如何使用逻辑回归 (logistic regression)来解决多类别分类问题,具体来说,我想通过一个叫做"一对多" (one-vs-all) 的分 ...

  9. mysql多个分类取n条_MySQL获取所有分类和每个分类的前N条记录

    MySQL获取所有分类和每个分类的前N条记录.比如有文章表 test(Id,type,tiem),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用. SELECT ...

最新文章

  1. raid模式_基于网络的磁盘热备技术|网络RAID-1
  2. 机器学习模型太大难部署?这里有 3 个解决方案
  3. 视频稳像(Video Stabilization)
  4. 为什么道理都懂,却还是一事无成
  5. php取得文件的大小
  6. 多路复用IO模型中的select和epoll
  7. leetcode之回溯backtracing专题3
  8. vb.net datagridview数据批量导入sql_【自学C#】|| 笔记 44 ComboBox:组合框控件数据绑定...
  9. matlab编程常用,Matlab常用60个编程
  10. javascript 页面刷新
  11. sql server 2005 T-SQL BEGIN DIALOG CONVERSATION (Transact-SQL)
  12. 【java】对学生成绩进行排序
  13. 关于HP C7K的firmware management中的power policy理解
  14. Jenkins教程(Linux版)
  15. HDFVIEW3.1.2下载
  16. 设计模式(20):外观模式Facade
  17. 51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)
  18. 无线桥接怎么设置网关和dns服务器,斐讯K2路由器怎么设置桥接_斐讯K2无线中继设置教程-192路由网...
  19. 想成为一个Java软件工程师,谁能带我学一学?
  20. 卡尔曼滤波最完整公式推导

热门文章

  1. 设置ubuntu12.04标题栏按钮
  2. ehlib中dbgrideh的多选框设置
  3. 互联网协议IP抓包分析 -- wireshark
  4. python基础——数字型
  5. 合并排序的非递归实现(自底向上设计)
  6. Hi3516A开发--根文件系统
  7. zcmu1862(模拟)
  8. hdu-2080(三角函数和向量)
  9. php 保护变量,保护PHP中的“包含污染”变量
  10. Java学习开发入门基础教程系列