Поле SELECT MySQL, содержащее подстроку

Использование LIKE очень распространено в MySQL. Мы используем его следующим образом: WHERE field LIKE '%substring%'. Где у нас есть подстрока, а поле имеет полную строку. Но мне нужно что-то противоположное. У меня есть подстроки в поле. Итак, я хочу эту строку, которая содержит подстроку моей строки. Предположим, что таблица:

----+-------------------
 id | keyword
----+-------------------
  1 | admission
----+-------------------
  2 | head of the dept
----+-------------------

и у меня есть строка от пользователя: Tell me about admission info. Мне нужен такой MySQL-запрос, который возвращает admission, поскольку это подстрока пользовательской строки. Что-то вроде:

SELECT keyword FROM table WHERE (keyword is a substring of 'Tell me about admission info')

заблаговременно.

Ответы

Ответ 1

Вы ищете LIKE оператор

Сравнение шаблонов с использованием простого сравнения регулярных выражений SQL. Возвращает 1 (TRUE) или 0 (FALSE). Если значение expr или pat равно NULL, результат равен NULL.

Что-то вроде

SELECT  keyword 
FROM    table 
WHERE   ('Tell me about admission info' LIKE CONCAT('%', keyword, '%'))

SQL Fiddle DEMO

Ответ 2

Эта работа прекрасна, используя REGEXP:

SELECT  keyword 
FROM    table 
WHERE   'Tell me about admission info' REGEXP keyword;

Но эта работа выполняется только в том случае, если keyword не содержит пробелов регулярного выражения...

т.е. Это будет нормально работать, а keyword содержать только буквы, цифры, пробелы и т.д.

Ответ 3

Попробуйте что-то вроде этого:

SELECT CASE WHEN 'Tell me about admission info' 
   LIKE CONCAT('%',`keyword`,'%')
   THEN `keyword` else null END as `keyword`

FROM    table1

WHERE CASE WHEN 'Tell me about admission info' 
  LIKE CONCAT('%',`keyword`,'%')
  THEN `keyword` else null END is not null;

SQL Fiddle..