Порядок предложения LIKE в запросе при желании использовать несколько терминов

#php #mysql #select #sql-like

#php #mysql #выберите #sql-подобный

Вопрос:

У меня есть запрос

 SELECT * FROM images WHERE tags LIKE '%example%hello%'
 

Я бы хотел, чтобы база данных выбирала строки, в которых есть ‘example’ и ‘hello’ в столбце ‘tags’ в любом порядке, как в:

Строка с ‘привет, тест, пример’, также ‘пример, привет, тест’ или любой другой вариант этого порядка. Возможно ли это, даже без использования LIKE? Все строки должны содержать все, что указано с помощью LIKE .

РЕДАКТИРОВАТЬ: например, когда я предоставляю ‘example’ и ‘hello’ в запросе, возвращаемые строки должны содержать как ‘example’, так и ‘hello’.

Ответ №1:

Вы могли бы попробовать простое OR быстрое решение:

 SELECT * FROM images WHERE tags LIKE '%example%' OR tags LIKE '%hello%'
 

Редактировать

Для решения вашей правки вы можете использовать AND вместо:

 SELECT * FROM images WHERE tags LIKE '%example%' AND tags LIKE '%hello%'
 

Комментарии:

1. Извините, я внес правку в мой вопрос во время публикации. Мне нужно, чтобы все возвращаемые строки содержали как «example», так и «hello».

2. @user1015599, просто будьте осторожны при обобщении этого метода, поскольку он, вероятно, не будет работать так, как вы ожидаете, если ваши два слова — «пример» и «экзамен», и могут даже возникнуть проблемы, если слова «пример» и «много».

Ответ №2:

Вы могли бы использовать FIND_IN_SET :

 SELECT tags FROM images WHERE FIND_IN_SET('hello', tags) AND FIND_IN_SET('example', tags)
 

Однако для этого требуется, чтобы в тегах не было пробелов после запятой (в этом случае вам придется выполнить замену на tags или более логических проверок). Это может быть быстрее, чем LIKE . Я не уверен.