Запрос для замены множества строк в БД

Тема в разделе "Базы данных", создана пользователем kurya4iy, 16 дек 2018.

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

    kurya4iy Постоялец

    Регистр.:
    7 май 2013
    Сообщения:
    61
    Симпатии:
    11
    Есть шаблон для замены значения текст1 на текст2
    UPDATE `таблица` SET `колонка` = replace(колонка, 'текст1', 'текст2')

    Как сразу заменить несколько значений, если их штук 50 например
     
  2. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    1.025
    Симпатии:
    277
    Только написать для каждой замены свой запрос.

    Можно использовать mysqli_multi_query(). И туда вставить все свои запросы через точку с запятой. http://php.net/manual/ru/mysqli.multi-query.php
     
  3. ElenaBeck123!

    ElenaBeck123! Создатель

    Регистр.:
    24 май 2017
    Сообщения:
    20
    Симпатии:
    5
    @dandandan: откуда mysqli_multi_query взялось? в задаче нет ни слова о php.
    @kurya4iy: это можно сделать и одним запросом `колонка` = replace(replace(replace(колонка, 'текст1', 'текст2'), 'текст3', 'текст4'), 'текст5', 'текст6') и т.д. Если вы действительно собираете sql запрос по частям в php, то написать рекурсивную функцию, которая будет строить ряд реплейсов, не составляет проблем.
     
  4. newminer

    newminer Создатель

    Регистр.:
    21 апр 2015
    Сообщения:
    15
    Симпатии:
    4
    Я бы посоветовал, если подобные задачи нужно выполнять регулярно, написать хранимую процедуру.
    В качестве ее входных параметров - текст1 и текст2.
     
  5. Trytone

    Trytone Постоялец

    Регистр.:
    14 май 2016
    Сообщения:
    102
    Симпатии:
    12
    Всего 50 замен - это не много.
    Я бы просто размножил строчки в excel, вставив в нужные места параметры замен.
    А потом в текстовый файл выгрузил и по одной строчке. И потом по-запросно в MyAdmin зафигачил бы все эти строки.
    Делов на 15 минут.
     
  6. prosp

    prosp Создатель

    Регистр.:
    9 апр 2012
    Сообщения:
    47
    Симпатии:
    23
    Самый простой запрос в реляционных DB:

    UPDATE users SET user_name = 'Gandalf White' WHERE user_name = 'Albus Dumbledore'
     
  7. Ambleranona

    Ambleranona Создатель

    Регистр.:
    24 окт 2018
    Сообщения:
    26
    Симпатии:
    6
    Создать переменную "типа массив", где все значения идут одной строкой с разделителем (напирмер запятая).
    Создать цикл прмямо в запросе ( WHILE i < 50 DO ... END WHILE; )
    Прокручиваем запрос UPDATE каждый раз с новым значением из массива.
    SET i=i+1;

    Профит