MySQL Split String для возврата всех слов во всех строках - PullRequest
3 голосов
/ 10 августа 2011

У меня есть хранимая процедура, как описано в: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/, чтобы использовать функцию MySQL Substring () для получения каждого слова в строке. Я хочу, чтобы следующий запрос возвращал каждое слово, которое появляется в каждой строке таблицы предложений. В настоящее время мне нужно отфильтровать позиции 1, 2, 3 и т. Д. Но я не знаю, сколько слов может иметь предложение, так что это очень неэффективно. Любые идеи о том, как получить все слова во всех предложениях в одном запросе?

SELECT DISTINCT SPLIT_STR(`SentenceText`, " ", 1) AS Word FROM `Sentences`;

В качестве примера: Если предложения содержали 2 строки:

this is a sentence
sentence galore

Я хочу один запрос, который возвращает:

this
is
a
sentence
galore

1 Ответ

0 голосов
/ 09 июня 2012

Вам нужно использовать функцию GROUP_CONCAT , чтобы получить все предложения в одной строке:

SELECT GROUP_CONCAT(sentence_column SEPARATOR ' ')
FROM Sentences
GROUP BY sentence_column;

Затем вам нужно токенизировать предложение и вставить токены во временную таблицу, а затемсделать выбор оттуда. Здесь - хороший пример (думаю, это именно то, что вам нужно).Удачи!

Обновление (из-за отрицательных голосов): Возможно, проблема с моим ответом состоит в том, что это не один запрос, а три этапа:

  1. Получить все предложения в одной строке (используя функцию group_concat)
  2. Передать эту строку в процедуру (я поместил ссылку на хороший пример такой процедуры, я не думаю, что копировать и вставитьздесь добавляется любое значение), которое токенизирует строку и вставляет каждую строку в таблицу, возможно, временную таблицу (назовем ее СЛОВАМИ).
  3. Выполните простой выбор, например SELECT * FROM WORDS

Я думаю, что эти шаги достигают желаемых результатов (но не в одном запросе)

Если вы поместите эти три шага в новую хранимую процедуру, то вы можете сделать один запрос к ней.

Пожалуйста, если вы собираетесь понизить голос, хотя бы найдите время, чтобы объяснить, почему вы голосуете (так как я нашел время, чтобы прочитать вопрос и ответить).

...