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"

16 comentários em “MySQL: Utilizando corretamente WHERE, LIKE, OR e AND”

  1. 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??

  2. 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?

  3. Wilder Vagner Gaspar

    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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima