MySQL Как несколько значений

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

У меня есть поля базы данных с этим содержимым

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

Почему этот запрос не работает? Мне нужны поля с спортом или пабом или обоими?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')

Ответ 1

Список (a,b,c) работает только с in. Для like вы должны использовать or:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

Ответ 3

Почему бы вам не попробовать REGEXP. Попробуйте это следующим образом:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'

Ответ 4

Вы также можете использовать RLIKE.

Например:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'

Ответ 5

Ваш запрос должен быть SELECT * FROM 'table' WHERE find_in_set(interests, "sports,pub")>0

Я понимаю, что вы храните интересы в одной области таблицы, что является ошибочным представлением. У вас обязательно должна быть таблица "процентов".

Ответ 6

Не забудьте использовать скобки, если вы используете эту функцию после параметра AND

Вот так:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')

Ответ 7

Как предложил @Alexis Dufrenoy, запрос может быть следующим:

SELECT * FROM 'table' WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0

Дополнительная информация в руководстве.

Ответ 8

Больше примеров работы:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'DELL'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

Задача состояла в том, чтобы подсчитать участников в событии (ях) с фильтром, если расширение электронной почты равно нескольким доменам компании.

Ответ 9

Или, если вам нужно сопоставить только начало слов:

WHERE interests LIKE 'sports%' OR interests LIKE 'pub%'

вы можете использовать регулярные выражения:

WHERE interests REGEXP '^sports|^pub'

https://www.regular-expressions.info/anchors.html