Поле 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, '%'))
Ответ 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..