#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
. Я не уверен.