Heim  >  Artikel  >  Datenbank  >  Erläuterung der Methode zum Konvertieren von Zeilen und Spalten von MySQL-Tabellendaten

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

jacklove
jackloveOriginal
2018-06-08 16:36:081885Durchsuche

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     |
+-------------+--------+

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               |
+-------------+---------------------+

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               |
+-------------+---------------------+

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               |
+-------------+---------------------+

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     |
+-------------+--------+

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;

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     |
+-------------+--------+

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!

Stellungnahme:
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