Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 13828
эту конструкцию
SELECT 1 AS num UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9 UNION ALL
    SELECT 10 UNION ALL


можно заменить на
SET @d = 0;
SELECT
  @d := @d+1 AS d
FROM любая_таблица
WHERE @d < 10
5 май 16, 05:22    [19136394]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 17425
Это хорошо, когда есть под рукой "любая таблица" с достаточным количеством записей... а то к INFORMATION_SCHEMA придётся обращаться - как бы некрасиво...
5 май 16, 10:29    [19137011]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
paha4444
Member

Откуда: Украина Одесская обл., Рени
Сообщений: 69
MasterZiv,

100% жесть полная! Интересно, если БД огромная то сколько займут времени такие запросы....
8 окт 16, 08:58    [19758447]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3292
paha4444,

Жесть конечно, но практика показывает что разбор текстов запросами выполняется примерно за то же самое время что и выборка из таблицы + запрос средствами клиента на ЯВУ а в ряде случаев и шустрее. Как ни странно. :)
19 фев 18, 12:53    [21201562]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4541
Возникла задача парсинга данных в MySQL.
Нашел проблему в использовании алгоритма стартового поста.

Пример:
create table tbl(
id int, 
data varchar(100) 
);

insert into tbl
values(1, 'vasya pupkin;vasya pupkin;vasya pupkin');

insert into tbl
values(2, 'vasya pupkin');

insert into tbl
values(3, 'vasya pupkin;petya petrov');


Надо разбить поле data по ; и записать данные в другую таблицу, сгруппировав по тексту.

Т.е. я должен получить такое:
SELECT 1, 'vasya pupkin', 3
UNION ALL
SELECT 2, 'vasya pupkin', 1
UNION ALL
SELECT 3, 'vasya pupkin', 1
UNION ALL
SELECT 3, 'petya petrov', 1

Но для начала хотя бы такое:
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 3, 'vasya pupkin'
UNION ALL
SELECT 3, 'petya petrov'



Делаю запрос:
SELECT
    tmp.`num` AS `num`
    ,`id`
    , SUBSTRING_INDEX(SUBSTRING_INDEX(src.`data`, ';', tmp.`num`), ';', -1) AS `word`
  FROM (
    SELECT 1 AS num UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 
  ) AS tmp
  JOIN `tbl` AS src
  HAVING `word` <> ''


Он возвращает:
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 3, 'vasya pupkin'
UNION ALL
SELECT 3, 'petya petrov'
UNION ALL
SELECT 3, 'petya petrov'

Т.е. всегда 3 записи, независимо от реального кол-ва разбиений.
В итоге у меня записи с ID IN (1, 2) получаются типа равнозначными по кол-ву записей...

У кого-то есть подходящий вариант решения или задачу надо передавать на клиентский уровень? :)
27 май 18, 15:41    [21444104]     Ответить | Цитировать Сообщить модератору
 Re: FAQ: обработка строк и парсинг текстов средствами MySQL  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4541
Возникла задача парсинга данных в MySQL.
Нашел проблему в использовании алгоритма стартового поста.

Пример:
create table tbl(
id int, 
data varchar(100) 
);

insert into tbl
values(1, 'vasya pupkin;vasya pupkin;vasya pupkin');

insert into tbl
values(2, 'vasya pupkin');

insert into tbl
values(3, 'vasya pupkin;petya petrov');


Надо разбить поле data по ; и записать данные в другую таблицу, сгруппировав по тексту.

Т.е. я должен получить такое:
SELECT 1, 'vasya pupkin', 3
UNION ALL
SELECT 2, 'vasya pupkin', 1
UNION ALL
SELECT 3, 'vasya pupkin', 1
UNION ALL
SELECT 3, 'petya petrov', 1

Но для начала хотя бы такое:
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 3, 'vasya pupkin'
UNION ALL
SELECT 3, 'petya petrov'



Делаю запрос:
SELECT
    tmp.`num` AS `num`
    ,`id`
    , SUBSTRING_INDEX(SUBSTRING_INDEX(src.`data`, ';', tmp.`num`), ';', -1) AS `word`
  FROM (
    SELECT 1 AS num UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 
  ) AS tmp
  JOIN `tbl` AS src
  HAVING `word` <> ''


Он возвращает:
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 1, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 2, 'vasya pupkin'
UNION ALL
SELECT 3, 'vasya pupkin'
UNION ALL
SELECT 3, 'petya petrov'
UNION ALL
SELECT 3, 'petya petrov'

Т.е. всегда 3 записи, независимо от реального кол-ва разбиений.
В итоге у меня записи с ID IN (1, 2) получаются типа равнозначными по кол-ву записей...

У кого-то есть подходящий вариант решения или задачу надо передавать на клиентский уровень? :)
27 май 18, 15:45    [21444107]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / MySQL Ответить