MySQL: Utilizando corretamente WHERE, LIKE, OR e AND
Um pequeno exemplo de como utilizar WHERE, LIKE, OR e AND num SELECT.
A variável $busca recebe o valor digitado de um campo, tipo um campo de busca de produtos (input type=text).
Forma errada:
Ao executar esse SELECT as condições do AND não são interpretadas, devido a forma como está montado o Select.
"SELECT * FROM produtos WHERE descricao_produto like '%".$busca."%' OR titulo_produto like '%".$busca."%' AND qtd_imagens_produto > 0 AND ativo = 1" |
Forma correta:
"SELECT * FROM produtos WHERE (descricao_produto like '%".$busca."%' OR (titulo_produto like '%".$busca."%')) AND qtd_imagens_produto > 0 AND ativo = 1" |
ou ainda…
"SELECT * FROM produtos WHERE (descricao_produto like '%".$busca."%' OR titulo_produto like '%".$busca."%') AND qtd_imagens_produto > 0 AND ativo = 1" |
Olá Tiago, repassei essa dica e como sempre ajudou muito.
Obrigado
Muito Obrigado pela ajuda!
tive alguns problemas em relação ao LIKE OR e AND juntos.
Sanados! Obrigado!
ótimo!! resolveu meu problema! valeu!!
Valeu pela dica! Tava um tempão aqui quebrando a cabeça. Abs.
Obrigado, isso me ajudou de uma forma incrível. Estava quase desistindo até encontrar a solução aqui.
Uma ajudinha.. No meu código:
if($tipo != ” && $pesquisa != ”)
$sql = mysql_query(“SELECT * FROM cliente WHERE (nome LIKE ‘%”.$pesquisa.”%’) AND tipo = ‘$tipo'”);
$pesquisa é um campo de texto e $tipo é uma combobox que recebe PF ou PJ
O meu problema ocorre é que ao selecionar um tipo e digitar um nome no campo pesquisa, o resultado não é de um registro especifico e sim de todos que contém o tipo escolhido. Como se a consulta estivesse ignorando o que foi digitado no campo pesquisa.
Alguém me ajuda??
Muito Obrigado, simples e prático !!
Legal! Bati a cabeça para ajustar um problema com LIKE nas minhas query´s.
Obrigado pela ajuda!
Como para para utilizar uma variável como parâmetro para o LIKE? Tentei de várias formas e não dá certo. =/
Como faço*.
PS: Se isso for possível, é claro.
Fala Jessé.
No post eu mostro como fazer.
Se quiser, me envia o select para eu analisar.
Abraço
Tiago
Olá Tiago, elaborei o seguinte comando SQL que deve filtrar os registros ativos (status = 0) e os que contenham um código (utilizei 181529 como teste).
A instrução SQL que desenvolvi é a seguinte:
select * from st_produto
where (titulo like _utf8 ‘%181529%’ or ref like _utf8 ‘%181529%’ or codigo like _utf8 ‘%181529%’)
and st_produto.status = 0
A condição or dentro dos parenteses filtra pelo titulo, referencia ou código e fora do parenteses a condição de status = 0 (and status = 0, pois nesse cado o status precisa ser = a 0) .
Ao rodar esse select filtra apenas pelo código, a condição de status = 0 é ignorada. Sabe me informar se tem algo de errado com esse código?
Lucimar,
Criei uma tabela com a estrutura do seu select e fiz alguns testes – o seu select está certo.
Retornou os dados, considerando a coluna status.
Obrigado pelo post, me salvou legal kk
Olá Tiago, eu estou com um problema parecido com a solução porém pra mim não funcionou. Eu tenho um formulário de pesquisa com dois campos um text e outro date. A busca funciona somente quando eu busco pelo campo text. Porém quando eu busco pelo campo Date a consulta me traz dados aleatórios e se eu preencho os dos campos ele também me retorna dados aleatórios abaixo a query que montém.
$sql = “SELECT REGISTRO_PRONTUARIO,NOME,DATA_NASCIMENTO,DOCUMENTO,TELEFONE FROM PRONTUARIO WHERE (NOME LIKE ‘%”.$this->nomePaciente.”%’ OR DATA_NASCIMENTO LIKE ‘%”.$this->dataNascimento.”%’)”;
Já tentei de todas as formas e não consegui resolver este problema.
Fala Wilder.
Preciso saber de 2 coisas:
– qual formato foi definiu para a coluna DATA_NASCIMENTO?
– qual valor vc está passando para $this->dataNascimento?