У меня есть база данных MySQL, которая выглядит так, и в ней нет системы ценностей в столбцах. Каков самый простой способ скопировать это в новую базу данных и отсортировать ее?
+----+---------------+--------------+---------------+--------------+---------------+--------------+---------------+--------------+
| ID | ID1 | Value1 | ID2 | Value2 | ID3 | Value3 | ID4 | Value4 |
+----+---------------+--------------+---------------+--------------+---------------+--------------+---------------+--------------+
| 1 | Picture | picture1.png | Documentation | doc1.pdf | Height | 10 | Volume | 150 |
| 2 | Documentation | doc2.pdf | Picture | picture2.png | Volume | 150 | Height | 10 |
| 3 | Volume | 200 | Height | 20 | Picture | picture3.png | Documentation | doc3.pdf |
| 4 | Height | 25 | Volume | 250 | Documentation | Doc4.pdf | Picture | picture4.png |
+----+---------------+--------------+---------------+--------------+---------------+--------------+---------------+--------------+
Я хочу, чтобы он выглядел примерно так: ID1 = Изображение, ID2 = Документация и так..?
+----+---------+--------------+---------------+----------------+--------+--------------+--------+--------+
| ID | ID1 | Value1 | ID2 | Value2 | ID3 | Value3 | ID4 | Value4 |
+----+---------+--------------+---------------+----------------+--------+--------------+--------+--------+
| 1 | Picture | picture1.png | Documentation | doc1.pdf | Volume | 100 | Height | 10 |
| 2 | Picture | picture2.png | Documentation | doc2.pdf | Volume | 150 | Height | 15 |
| 3 | Picture | picture3.png | Documentation | doc3.pdf | Volume | 200 | Height | 20 |
| 4 | Picture | picture4.png | Documentation | doc4.pdf | Volume | 250 | Height | 25 |
+----+---------+--------------+---------------+----------------+--------+--------------+--------+--------+
Для данных, которые вы предоставили, это будет работать:
CREATE TABLE Table2
('ID' int,
'ID1' varchar(13), 'Value1' varchar(12),
'ID2' varchar(13), 'Value2' varchar(12),
'ID3' varchar(13), 'Value3' varchar(12),
'ID4' varchar(13), 'Value4' varchar(12));
INSERT INTO Table2
(SELECT id, 'Picture' as ID1,
CASE WHEN id1='Picture' THEN value1 WHEN id2='Picture' THEN value2 WHEN id3='Picture' THEN value3 ELSE value4 END AS value1,
'Documentation' AS ID2,
CASE WHEN id1='Documentation' THEN value1 WHEN id2='Documentation' THEN value2 WHEN id3='Documentation' THEN value3 ELSE value4 END AS value2,
'Volume' AS ID3,
CASE WHEN id1='Volume' THEN value1 WHEN id2='Volume' THEN value2 WHEN id3='Volume' THEN value3 ELSE value4 END AS value3,
'Height' AS ID4,
CASE WHEN id1='Height' THEN value1 when id2='Height' THEN value2 when id3='Height' THEN value3 ELSE value4 END AS value4
FROM Table1);
SELECT * FROM Table2
Выход:
ID ID1 Value1 ID2 Value2 ID3 Value3 ID4 Value4
1 Picture picture1.png Documentation doc1.pdf Volume 150 Height 10
2 Picture picture2.png Documentation doc2.pdf Volume 150 Height 10
3 Picture picture3.png Documentation doc3.pdf Volume 200 Height 20
4 Picture picture4.png Documentation Doc4.pdf Volume 250 Height 25
На этом этапе вам, вероятно, следует рассмотреть возможность изменения структуры вашей таблицы, так как в этой таблице содержится много избыточной информации (ID1 всегда "Изображение", ID2 всегда "Документация" и т.д.), Поэтому вы можете, возможно, удалить эти поля и просто имеют поля с именем "Изображение", "Документация" и т.д. Вы можете сделать это, используя этот запрос:
CREATE TABLE Table3
('ID' int,
'Picture' varchar(12),
'Documentation' varchar(12),
'Volume' varchar(12),
'Height' varchar(12));
INSERT INTO Table3
(SELECT id,
CASE WHEN id1='Picture' THEN value1 WHEN id2='Picture' THEN value2 WHEN id3='Picture' THEN value3 ELSE value4 END AS Picture,
CASE WHEN id1='Documentation' THEN value1 WHEN id2='Documentation' THEN value2 WHEN id3='Documentation' THEN value3 ELSE value4 END AS Documentation,
CASE WHEN id1='Volume' THEN value1 WHEN id2='Volume' THEN value2 WHEN id3='Volume' THEN value3 ELSE value4 END AS Volume,
CASE WHEN id1='Height' THEN value1 when id2='Height' THEN value2 when id3='Height' THEN value3 ELSE value4 END AS Height
FROM Table1);
SELECT * FROM Table3
Выход:
ID Picture Documentation Volume Height
1 picture1.png doc1.pdf 150 10
2 picture2.png doc2.pdf 150 10
3 picture3.png doc3.pdf 200 20
4 picture4.png Doc4.pdf 250 25
для лучшей модели БД Используйте правильные имена столбцов
record_id, image_name, image_url, doc_name, doc_url, том, высота и сделать record_id Auto Increment