GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

SELECT usando vários textos num único campo separados por ;

Tags: #<Tag:0x00007f22e1084d18> #<Tag:0x00007f22e1084bb0> #<Tag:0x00007f22e1084a20> #<Tag:0x00007f22e10847f0>

Fala galera, estou precisando de uma ajudinha aqui num SELECT do MySQL, tenho uma aplicação WEB onde posso filtrar coisa e trazer o resultado numa dataTable, está tudo ok, porém queria implementar uma consulta que o usuários possa filtrar vários critérios de uma vez separando os textos a procurar por ponto e vírgula, exemplo:

SELECT *
FROM tabela
WHERE produto = 'ARROZ;FEIJAO;MACARRAO' 
ORDER BY cod ASC

Eu consegui chegar nisto, vejam usando minha tabela real, o que eu faço aqui? Se o usuário não digitar nada no campo de pesquisa coloco um “|” se digitar “texto1;texto2;texto3;” ai substituo o “;” por “|” e roda normalmente:

SELECT * FROM tb_rnc 
WHERE 
numero_rnc REGEXP(REPLACE('|', ';' , '|')) AND 
status_rnc REGEXP(REPLACE('|', ';' , '|')) AND 
nota_fiscal REGEXP(REPLACE('|', ';' , '|')) AND 
material REGEXP(REPLACE('|', ';' , '|')) AND 
status_plano_acao REGEXP(REPLACE('|', ';' , '|')) AND 
numero_alerta_qualidade REGEXP(REPLACE('|', ';' , '|')) AND 
numero_rac REGEXP(REPLACE('|', ';' , '|')) 
ORDER BY cod DESC;

Está funcionando perfeitamente ok, porém quando se depara com uma coluna que tenha NULL não funciona.

Consultando, as duas colunas em destaque abaixo é NULL então não traz nada:

Agora se eu não incluo estas colunas que tem NULL então traz a consulta pois as demais colunas possuem informação:

Existe alguma outra forma de fazer esta consulta?

Consegui!!!

SELECT * FROM tb_rnc 
WHERE 
numero_rnc REGEXP(REPLACE('|', ';' , '|')) AND 
status_rnc REGEXP(REPLACE('|', ';' , '|')) AND 
nota_fiscal REGEXP(REPLACE('|', ';' , '|')) AND 
material REGEXP(REPLACE('|', ';' , '|')) AND 
status_plano_acao REGEXP(REPLACE('|', ';' , '|')) AND 
IFNULL(numero_alerta_qualidade, '') REGEXP(REPLACE('|', ';' , '|')) AND 
IFNULL(numero_rac, '') REGEXP(REPLACE('|', ';' , '|'))
ORDER BY cod DESC;

colocando o IFNULL(campo, '') na frente da certo hehehe, se tiverem uma outra forma mais simples compartilhem conosco blz, valeu.

//