日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql一对多分类_mysql一对多结果归类

發布時間:2025/3/15 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql一对多分类_mysql一对多结果归类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我從數據庫里面查出來很多數據,都是一條一條的,是一個二維數組,格式如下:

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一对多结果归类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。