Ответ 1
Список (a,b,c)
работает только с in
. Для like
вы должны использовать or
:
WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
У меня есть этот запрос MySQL.
У меня есть поля базы данных с этим содержимым
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
Почему этот запрос не работает? Мне нужны поля с спортом или пабом или обоими?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
Список (a,b,c)
работает только с in
. Для like
вы должны использовать or
:
WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
Более быстрый способ сделать это:
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
Почему бы вам не попробовать REGEXP. Попробуйте это следующим образом:
SELECT * FROM table WHERE interests REGEXP 'sports|pub'
Вы также можете использовать RLIKE
.
Например:
SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'
Ваш запрос должен быть SELECT * FROM 'table' WHERE find_in_set(interests, "sports,pub")>0
Я понимаю, что вы храните интересы в одной области таблицы, что является ошибочным представлением. У вас обязательно должна быть таблица "процентов".
Не забудьте использовать скобки, если вы используете эту функцию после параметра AND
Вот так:
WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')
Как предложил @Alexis Dufrenoy, запрос может быть следующим:
SELECT * FROM 'table' WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0
Дополнительная информация в руководстве.
Больше примеров работы:
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";
Задача состояла в том, чтобы подсчитать участников в событии (ях) с фильтром, если расширение электронной почты равно нескольким доменам компании.
Или, если вам нужно сопоставить только начало слов:
WHERE interests LIKE 'sports%' OR interests LIKE 'pub%'
вы можете использовать регулярные выражения:
WHERE interests REGEXP '^sports|^pub'