1

Тема: частичное копирование стобцов по regexp - помогите составить запрос.

Необходимо в одной таблице частично скопировать данные из одного столбца в другой. необходимые данные определяются выражением regexp (кое-как составил). помогите составить запрос phpmyadmin

2

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Не совсем понятно как скопировать и куда.

Выбрать по регулярному выражению можно так:

SELECT * FROM `table` WHERE `field` REGEXP "регулярное выражение";

И затем можно использовать INSERT ... SELECT.

3 (изменено: DmitryV, 2010-08-02 22:06:55)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Уточни подробнее что и куда может это подойдет:

INSERT `таблица куда` (`имя столбца куда вставить`) SELECT `имя столбца от куда выбрать` FROM таблица от куда REGEXP "регулярное выражение";

или

INSERT `таблица куда` (`имя столбца куда вставить`) SELECT `имя столбца` AS `имя столбца от куда выбрать` FROM таблица от куда REGEXP "регулярное выражение";

4

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Hanut сказал:

Не совсем понятно как скопировать и куда.

оба столбца в одной таблице. данные текстовые. забыл сказать, нужно чтобы строки не перепутались.

5

Re: частичное копирование стобцов по regexp - помогите составить запрос.

yanus

UPDATE `table` SET `field_new` = `field_old` WHERE `field_old` REGEXP "regexp";

6

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Hanut сказал:

yanus

UPDATE `table` SET `field_new` = `field_old` WHERE `field_old` REGEXP "regexp";

запрос сработал. проблема в том, что я похоже неверно описал задачу. мне нужно не целиком копировать ячейку, а только содержимое, которое описано regexp'ом.
то есть, если есть фраза "в лесу родилась елочка" и regexp /елочка/, нужно скопировать только слово "елочка".

7 (изменено: DmitryV, 2010-08-04 11:21:16)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Попробуйте:

UPDATE `table` SET `field_new` = `field_old` AS `field_old` REGEXP "regexp";

если не сработает свяжитесь со мной в ПМ поделитесь куском таблицы и попробую Вам помоч.

8

Re: частичное копирование стобцов по regexp - помогите составить запрос.

DmitryV сказал:

Попробуйте:

UPDATE `table` SET `field_new` = `field_old` AS `field_old` REGEXP "regexp";

если не сработает свяжитесь со мной в ПМ поделитесь куском таблицы и попробую Вам помоч.

попробывал - ругается на синтаксис:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `fulltext` REGEXP "???????

9

Re: частичное копирование стобцов по regexp - помогите составить запрос.

тогда подставьте SELECT по ID в UPDATE

10 (изменено: DmitryV, 2010-08-04 11:38:25)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

UPDATE `table` SET `field_new` = (SELECT `field_old` REGEXP "regexp")  WHERE ID=ID;

если не сработает попробуйте задать в селекте имя таблицы:

UPDATE `table` SET `field_new` = (SELECT `field_old` REGEXP "regexp" FROM `table`)  WHERE ID=ID;

11

Re: частичное копирование стобцов по regexp - помогите составить запрос.

DmitryV сказал:
UPDATE `table` SET `field_new` = (SELECT `field_old` REGEXP "regexp")  WHERE ID=ID;

если не сработает попробуйте задать в селекте имя таблицы:

UPDATE `table` SET `field_new` = (SELECT `field_old` REGEXP "regexp" FROM `table`)  WHERE ID=ID;

второй вариант выдал ошибку синтаксиса.
первый вариант обновил столбец, но вместо данных записались значения 1 и 0.

12 (изменено: DmitryV, 2010-08-04 12:05:04)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

проверьте что у вас в запросе отдельно выдает SELECT `field_old` REGEXP "regexp"
когда в запросе выдаст нужные вам данные подставьте его в UPDATE при условии что ID=ID
проверьте чтоб у стобцов был одинаковый формат данных
в таблице у вас поле ID уникально должно быть.

13

Re: частичное копирование стобцов по regexp - помогите составить запрос.

DmitryV сказал:

проверьте что у вас в запросе отдельно выдает SELECT `field_old` REGEXP "regexp"
когда в запросе выдаст нужные вам данные подставьте его в UPDATE при условии что ID=ID

попробовал разные варианты везде 1/0

DmitryV сказал:

проверьте чтоб у стобцов был одинаковый формат данных

он одинаковый.

14 (изменено: DmitryV, 2010-08-04 12:37:07)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Так, а просто селект по регулярному Вашему выражению что выдает?

что SELECT по нему выдаст то и вставиться проверьте запрос SELECT

Постойте запрос селект чтоб получить нужные вам данные и вставьте его в UPDATE при условии что ID=ID

запрос стройте чтоб выдавал 1 строку данных

15 (изменено: DmitryV, 2010-08-04 17:10:19)

Re: частичное копирование стобцов по regexp - помогите составить запрос.

Попробуйте ещё:

UPDATE ИМЯ_ТАБЛИЦЫ SET ИМЯ_ПОЛЯ = REPLACE(ИМЯ_ПОЛЯ, ‘строка для замены’, ‘чем заменяем’);

Нужны структура и данные для образца и Ваше регулярное выражение стукните в ПМ (почта форума), постараюсь решить вашу задачу.

И полное условие ТЗ (Тех. Задание) + ваш шаблон регулярного выражения.

PS: И теперь подумаем от куда туда вставляються данные может проще сразу вносить нужные данные в таблицу...

MySQl только ищит по шаблону регулярного выражения для операций со строками пишим php скрипт или mysql тригер и обрабатываем строку.

Все встроенные функции для работы со строками описаны на http://dev.mysql.com/doc/refman/5.1/en/ … tions.html

Операции со строками делайте в скрипте php.