Сортировка / очистка базы данных MySQL

0

У меня есть база данных 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 |
+----+---------+--------------+---------------+----------------+--------+--------------+--------+--------+
  • 0
    Когда вы говорите, база данных, вы имеете в виду таблицу, верно?
  • 0
    Кажется, что у вас есть только одна таблица во всей информации, когда вам, вероятно, должно быть несколько таблиц, чтобы получить лучшую модель базы данных
Показать ещё 1 комментарий
Теги:
sorting

2 ответа

0
Лучший ответ

Для данных, которые вы предоставили, это будет работать:

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 
0

для лучшей модели БД Используйте правильные имена столбцов

record_id, image_name, image_url, doc_name, doc_url, том, высота и сделать record_id Auto Increment

Ещё вопросы

Сообщество Overcoder
Наверх
Меню