В базе данных MySQL 5.6 у меня есть таблица tablename
которая имеет (включая другие) три столбца TEXT
: col_a, col_b, col_c
.
Я хочу извлечь все уникальные слова (со словами, разделенными пробелами) из этих трех столбцов длиной не менее 5 символов. Под словом "слово" я подразумеваю любую строку непробельных символов, например, "foo-123" будет словом, как и "099423". Все столбцы являются столбцами InnoDB формата utf8.
Есть ли один запрос для этого?
РЕДАКТИРОВАТЬ: По запросу, вот пример: (в реальных данных col_a, col_b и col_c являются полями TEXT и может иметь большое количество слов.)
select id, col_a, col_b, col_c from tablename;
id | col_a | col_b | col_c
----|--------------------|----------------|----------------------
1 | apple orange plum | red green blue | bill dave sue
2 | orange plum banana | yellow red | frank james
3 | kiwi fruit apple | green pink | bill sarah-jane frank
expected_result: ["apple", "orange", "banana", "fruit",
"green", "yellow", "frank", "james", "sarah-jane"]
Меня не волнует порядок результатов. Спасибо!
РЕДАКТИРОВАТЬ: в моем примере выше, все в нижнем регистре, как то, как я могу хранить все в моей реальной таблице, к которой относится этот вопрос. Но, ради аргумента, если бы он содержал некоторую заглавную букву, я бы предпочел, чтобы запрос игнорировал заглавные буквы (это настройка моей конфигурации БД, как это происходит).
EDIT2: если это помогает, все текстовые столбцы имеют индекс FULLTEXT.
EDIT3: вот SQL для создания образца данных:
DROP TABLE IF EXISTS 'tablename';
CREATE TABLE 'tablename' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'col_a' text,
'col_b' text,
'col_c' text,
PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
LOCK TABLES 'tablename' WRITE;
INSERT INTO 'tablename' VALUES (1,'apple orange plum','red green blue','bill dave sue'),(2,'orange plum banana','yellow red','frank james'),(3,'kiwi fruit apple','green pink','bill sarah-jane frank');
UNLOCK TABLES;