Заменить не повторяющуюся часть текста в колонке

Тема в разделе "Базы данных", создана пользователем Sergo_Sev, 8 дек 2012.

Модераторы: latteo
  1. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Есть в БД ссылки такого вида
    Требуется удалить из ссылок часть "&rct=***", реально ли это сделать средствами MqSQL ?
     
  2. Leony

    Leony

    Регистр.:
    18 мар 2008
    Сообщения:
    153
    Симпатии:
    25
    Насколько мне известно, MySQL использует движёк POSIX ERE, и поэтому не поддерживает 'backreference', т.е. конструкцию вычленения искомого, чтобы производить над ним операции в дальнейшем. Обычно это делают с пом. паттерна, заключённого в круглые скобки, всё, что вне скобок – игнорируется, т.е. создаётся выборка нужно – остальное выбрасывается. Думаю, ты это сам знаешь.
    Одним словом, экспортируй данные таблицы в текст, и заменяй паттерн типа (.*)&rct=.* на $1, и апдейть обратно.
     
  3. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Проблема в том, что в этой таблице более 500 000 записей и БД весит 1 гиг - слишком много, что не представляю где можно такой файл открыть
    Если только скрипт писать для перебора всех строк
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.244
    Раз ты уже знаешь, что именно повторятеся, то для простой замены во всех ссылках &rct=j можно использовать REPLACE
    А вот если тебе первоначально нужно проанализировать все ссылки и найти совпадение, то лучше будет скрипт написать.
     
  5. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    188
    Нужно заменить всё после &rct= и эта часть везде разная
     
  6. Leony

    Leony

    Регистр.:
    18 мар 2008
    Сообщения:
    153
    Симпатии:
    25
    Лучше всего найти и экспортнуть именно ту таблицу, в которой нужно производить замену – БД обычно состоят из множества таблиц.
    sql-файл лучше всего сохранить или конвертнуть в win1251/ANSI/кодировку Widows, но для разбивки на файлы это не обязательно.
    Берём KeyWordKeeper (он с UTF не работает), разбиваем на файлы.
    поиском, например тоталКоммандера ищем, в каких файлах есть искомое – отделяем эти файлы от остальных.
    Разрезаем строки типа (данные),(данные) в полученных файлах на подстроки (выборка) – KeyWordKeeper их сольёт в одноимённые файлы.
    Любым текстовым редактором, который поддерживает регулярки производим по файлам поиск изамену по паттерну в моём посте выше.
    В том же текстовом редакторе собираем подстроки в строки и скармливаем (Update или Insert, если удалили) мускулу.
     
    Sergo_Sev нравится это.