MySQL как несколько значений - PullRequest
124 голосов
/ 13 ноября 2010

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

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

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

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

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

Ответы [ 7 ]

278 голосов
/ 27 сентября 2011

Более быстрый способ сделать это:

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

это:

WHERE interests REGEXP 'sports|pub'

Нашел это решение здесь: http://forums.mysql.com/read.php?10,392332,392950#msg-392950

Подробнее о REGEXP здесь: http://www.tutorialspoint.com/mysql/mysql-regexps.htm

112 голосов
/ 13 ноября 2010

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

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
32 голосов
/ 16 января 2016

Почему бы вам не попробовать REGEXP.Попробуйте это так:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'
9 голосов
/ 09 мая 2018

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

Например:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'
8 голосов
/ 13 ноября 2010

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

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

5 голосов
/ 17 сентября 2015

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

Например:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')
2 голосов
/ 20 октября 2017

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

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

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

...