Eu tenho essa consulta MySQL.
Eu tenho campos de banco de dados com este conteúdo
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
Por que essa consulta semelhante não funciona? Eu preciso dos campos com esportes ou pub ou ambos?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
Maneira mais rápida de fazer isso:
é isto:
Encontre esta solução aqui: http://forums.mysql.com/read.php?10,392332,392950#msg-392950
Mais sobre o REGEXP aqui: http://www.tutorialspoint.com/mysql/mysql-regexps.htm
fonte
(select group_concat(myColumn separator '|') from..)
Por que você não tenta o REGEXP. Tente assim:
fonte
SELECT * FROM table WHERE interests NOT REGEXP 'sports|pub'
(> ‿◠) ✌jazkat
resposta 5 anos antes da sua?Você também pode usar
RLIKE
também.Por exemplo:
fonte
Sua consulta deve ser
SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0
O que eu entendo é que você armazena os interesses em um campo da sua tabela, o que é um equívoco. Você deve definitivamente ter uma tabela de "interesse".
fonte
SELECT * FROM table WHERE find_in_set(interests, 'sports,pub')
, mas é provável que essa técnica supere o regex na maioria das situações.Não se esqueça de usar parênteses se você usar esta função após um
AND
parâmetroComo isso:
fonte
Ou se você precisar corresponder apenas ao início das palavras:
você pode usar as correspondências de intercalação regexp:
https://www.regular-expressions.info/anchors.html
fonte
Como o @Alexis Dufrenoy propôs, a consulta poderia ser:
Mais informações no manual .
fonte
Mais exemplos de trabalho:
A tarefa era contar participantes em um evento com filtro se a extensão de email fosse igual a vários domínios da empresa.
fonte