Davlik
@Davlik

Как объеденить n+1 столбцов попарно?

Здравствуйте!
Есть таблица, в ней очень много столбцов, не пойму как их объеденить попарно.
CREATE TABLE rasp (
    `gname` VARCHAR(58) CHARACTER SET utf8,
    `gid` VARCHAR(7) CHARACTER SET utf8,
    `1pon` VARCHAR(58) CHARACTER SET utf8,
    `1pon_n` VARCHAR(22) CHARACTER SET utf8,
    `2pon` VARCHAR(51) CHARACTER SET utf8,
    `2pon_n` VARCHAR(26) CHARACTER SET utf8,
    `3pon` VARCHAR(80) CHARACTER SET utf8,
    `3pon_n` VARCHAR(34) CHARACTER SET utf8,
    `4pon` VARCHAR(120) CHARACTER SET utf8,
    `4pon_n` VARCHAR(42) CHARACTER SET utf8,
    `5pon` VARCHAR(90) CHARACTER SET utf8,
    `5pon_n` VARCHAR(43) CHARACTER SET utf8,
    `6pon` VARCHAR(80) CHARACTER SET utf8,
    `6pon_n` VARCHAR(53) CHARACTER SET utf8,
    `7pon` VARCHAR(57) CHARACTER SET utf8,
    `7pon_n` VARCHAR(47) CHARACTER SET utf8,

В итоге, хочу что-бы данные, например, из 1pon_n перенеслись в 1pon, 2pon_n в 2pon соответственно.
Знаю, что есть concat(гугл, меня, просветил), но скеливать каждый раз при запросе в бд мне не нужно, нужно чтобы на сервер лежал уже готовый вариант.
Проблема в том, что что вместо pon у меня есть еще sreda,cht.. (сокращенные дни недели).
Запрос insert:
INSERT INTO rasp VALUES ('ПРИКЛАДНАЯ МАТЕМАТИКА И ИНФОРМАТИКА','9611','ЯиМП 1006 Марченко','','А и Г 1008 Ануфриева','','ч/нАлгебра и геометрия 216 Карчевский Е.М.','н/нМатематический анализ 216 Лапин','Иностранный язык  Хакимзянова Д. 404, Саляхова 309, Баранова 507, Сабирова 511, Яхин 801, Сигачева 312, Сайфуллина 313  ','','','','','','','','','МА 1113 Тихонов','','Математический анализ 216 Лапин','','','','','','','','','','','','','н/нЯзыки и методы программирования 1211 Гайнутдинова','ч/нА и Г 1006 Ануфриева','Иностранный язык  Хакимзянова Д. 511, Саляхова 309, Баранова 507, Сабирова 404, Яхин 801, Сигачева 904, Сайфуллина 404 ф/к  ','','Алгебра и геометрия 216 Карчевский Е.М.','','Лаб. пр-кум 1206 Марченко','','','','','','','','','','','','','','','','','','','','','','','','','','Языки и методы программирования 1211 Гайнутдинова','','МА 905 Тихонов','','Уч. пр-ка 1206 Марченко','','','','','','','','','Архитектура компьютеров 1113 Кадыров','','Иностранный язык  Хакимзянова Д. 404, Саляхова 801, Баранова 511, Сабирова 409, Яхин 904, Сигачева 406, Сайфуллина 312  ','','','','','','','','','','','');
INSERT INTO rasp VALUES ('ПРИКЛАДНАЯ МАТЕМАТИКА И ИНФОРМАТИКА','9611','ЯиМП 1114 Зиятдинов','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','Уч. пр-ка 910 Зиятдинов','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','Лаб. пр-кум 910 Зиятдинов','','','','','','','','','','','','','','','','','','','','','','');


Также нужно склеить строки с одинаковыми gid, они идут не по порядку, то есть может быть 9611 а следующий 9742. Строк с одинаковым gid минимум 2( есть еще 2 и 3)
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
impwx
@impwx
Разработчик
1, Перенести данные из одного столбца в другой можно с помощью инструкции UPDATE, но все столбцы придется описывать руками, либо написать отдельный скрипт на другом языке, который бы генерировал этот код в виде строки:

UPDATE rasp
SET
    1pon = CONCAT(1pon, ' ', 1pon_n),
    2pon = CONCAT(2pon, ' ', 2pon_n),
    ...


2. Чтобы устранить дубликаты, первым делом в таблицу нужно добавить первичный уникальный ключ (назовем его unique_id). Проще всего их будет удалить с помощью программы на императивном языке программирования (типа php, c#, python или любом другом подходящем), которая выгружает записи, анализирует их и удаляет. Решение на чистом SQL возможно, но из-за неизвестного количества дубликатов оно будет либо очень сложным, либо его придется запускать многократно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы