Heim > Datenbank > MySQL-Tutorial > Hauptteil

Erläuterung der Methode zum Konvertieren von Zeilen und Spalten von MySQL-Tabellendaten

jacklove
Freigeben: 2018-06-08 16:36:08
Original
1963 Leute haben es durchsucht

Während des Entwicklungsprozesses ist es aus historischen Gründen oder aus Leistungsgründen erforderlich, die Spaltendaten der Tabelle in Zeilendaten umzuwandeln oder die Zeilendaten zur Verwendung in Spaltendaten umzuwandeln Zeilen und Zeilen von MySQL-Tabellendaten und Bereitstellung vollständiger Demonstrationsbeispiele und SQL-Kenntnisse.

1. Zeilen in Spalten konvertieren

Testdatentabelle und -daten erstellen

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     |
+-------------+--------+
Nach dem Login kopieren

Erwarten Sie nach dem Konvertieren von Zeilen in Spalten Das folgende Ergebnis

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

kann mithilfe der Funktion group_concat() in Kombination mit group by von Zeile zu Spalte konvertiert werden.

Die Funktion group_concat() kann den Verbindungswert der Ausdruckskombination abrufen. Das Standardtrennzeichen ist Komma, das über Trennzeichen auf andere Trennzeichen festgelegt werden kann.

Hinweis: Die Funktion group_concat() hat eine Längenbeschränkung für das zurückgegebene Ergebnis. Der Standardwert beträgt 1024 Bytes, reicht aber für normale Situationen aus.

Informationen zur Verwendung der Funktion group_concat() finden Sie in meinem vorherigen Artikel: „Anleitung zur Verwendung der MySQL-Funktionen concat und group_concat“

Ausführungsergebnisse:

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               |
+-------------+---------------------+
Nach dem Login kopieren

2. Spalte zu Zeile

Testdatentabelle und -daten erstellen

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               |
+-------------+---------------------+
Nach dem Login kopieren

Spalte in Zeile Abschließend erwarten wir die folgenden Ergebnisse

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

Die Spaltenkonvertierung ist komplizierter als die Zeilenkonvertierung. Für Daten, deren Spalteninhalt durch Trennzeichen getrennt ist, können wir verwenden substring_index() Funktion zum Teilen der Ausgabe und Combine kartesisches Produkt zum Implementieren einer Schleife.

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;
Nach dem Login kopieren

Ausführungsergebnis:

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     |
+-------------+--------+
Nach dem Login kopieren

In diesem Artikel wird die Methode zum Konvertieren von Zeilen und Spalten von MySQL-Tabellendaten erläutert Beachten Sie die chinesische Website von Pan Heping.

Verwandte Empfehlungen:

Wie man mehrere eindimensionale Arrays mit PHP zu einem zweidimensionalen Array kombiniert

Erklären Sie die PHP-Rückgabe Methoden zum Angeben mehrerer Spalten in einem Array

Detaillierte Erläuterung der PHP-basierten Redis-Zählerklasse

Das obige ist der detaillierte Inhalt vonErläuterung der Methode zum Konvertieren von Zeilen und Spalten von MySQL-Tabellendaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage