>  기사  >  데이터 베이스  >  mysql 테이블 데이터의 행과 열을 변환하는 방법에 대한 설명

mysql 테이블 데이터의 행과 열을 변환하는 방법에 대한 설명

jacklove
jacklove원래의
2018-06-08 16:36:081885검색

개발 과정에서 역사적 이유나 성능상의 이유로 테이블의 컬럼 데이터를 행 데이터로 변환하거나, 행 데이터를 컬럼 데이터로 변환하여 사용할 필요가 있습니다. mysql 테이블 데이터의 열과 완전한 데모 예제 및 SQL 기술을 제공합니다.

1. 행을 열로 변환

테스트 데이터 테이블 및 데이터 만들기

CREATE TABLE `option` ( `category_id` int(10) unsigned NOT NULL COMMENT '分类id', `name` varchar(20) NOT NULL COMMENT '名称', KEY `category_id` (`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option` (`category_id`, `name`) VALUES
(1, '大'),
(1, '中'),
(1, '小'),
(2, '奔驰'),
(2, '宝马'),
(3, '2015'),
(3, '2016'),
(3, '2017'),
(3, '2018'),
(4, '1m'),
(4, '2m');mysql> select * from `option`;
+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

행을 열로 변환한 후 다음 결과를 예상하세요.

+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

행을 열로 변환하려면 group_concat()을 사용할 수 있습니다. 기능을 통해 그룹을 성취했습니다.

group_concat() 함수는 표현식 조합의 연결 값을 가져올 수 있습니다. 기본 구분 기호는 쉼표이며 구분 기호를 통해 다른 구분 기호로 설정할 수 있습니다.

참고: group_concat() 함수에는 반환된 결과에 길이 제한이 있습니다. 기본값은 1024바이트이지만 일반적인 상황에서는 충분합니다.

group_concat() 함수 사용에 대해서는 이전 기사인 "mysql 함수 concat 및 group_concat 사용 지침"을 참조하세요.

실행 결과:

mysql> select category_id,group_concat(name) as name from `option` group by category_id order by category_id;
+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

2.

테스트 데이터 만들기 테이블 및 데이터

CREATE TABLE `option2` ( `category_id` int(10) unsigned NOT NULL COMMENT '分类id', `name` varchar(100) NOT NULL COMMENT '名称集合') ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `option2` (`category_id`, `name`) VALUES
(1, '大,中,小 '),
(2, '奔驰,宝马'),
(3, '2015,2016,2017,2018'),
(4, '1m,2m');mysql> select * from `option2`;
+-------------+---------------------+| category_id | name                |
+-------------+---------------------+|           1 | 大,中,小            |
|           2 | 奔驰,宝马           |
|           3 | 2015,2016,2017,2018 ||           4 | 1m,2m               |
+-------------+---------------------+

열을 행으로 변환한 후 다음과 같은 결과를 예상하세요

+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

열을 행으로 변환하는 것은 행을 열로 변환하는 것보다 더 복잡합니다.

substring_index() 함수를 사용하여 출력을 분할하고 Cartesian product와 결합하여 루핑을 구현할 수 있습니다.

select a.category_id,substring_index(substring_index(a.name,&#39;,&#39;,b.category_id),&#39;,&#39;,-1) as name from `option2` as ajoin `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,&#39;,&#39;,&#39;&#39;))+1)order by a.category_id,b.category_id;

실행 결과:

mysql> select a.category_id,substring_index(substring_index(a.name,&#39;,&#39;,b.category_id),&#39;,&#39;,-1) as name from `option2` as a    -> join `option2` as b on b.category_id<=(length(a.name) - length(replace(a.name,&#39;,&#39;,&#39;&#39;))+1)    -> order by a.category_id,b.category_id;
+-------------+--------+| category_id | name   |
+-------------+--------+|           1 | 大     |
|           1 | 中     |
|           1 | 小     |
|           2 | 奔驰   |
|           2 | 宝马   |
|           3 | 2015   |
|           3 | 2016   |
|           3 | 2017   |
|           3 | 2018   |
|           4 | 1m     ||           4 | 2m     |
+-------------+--------+

이 글에서는 mysql 테이블 데이터의 행과 열을 변환하는 방법에 대해 설명합니다. 자세한 내용은 Pan Heping Chinese 웹사이트를 참고하세요.

관련 권장 사항:

php를 통해 여러 개의 1차원 배열을 2차원 배열로 결합하는 방법

php에서 배열의 지정된 여러 열을 반환하는 관련 방법을 설명

php 기반 redis 카운터 클래스 자세한 설명

위 내용은 mysql 테이블 데이터의 행과 열을 변환하는 방법에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.