MySQL

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 thoughts on “MySQL: Utilizando corretamente WHERE, LIKE, OR e AND

  • Valter Ferreira Martins

    Olá Tiago, repassei essa dica e como sempre ajudou muito.
    Obrigado

    Resposta
  • Vinicius Z Silva

    Muito Obrigado pela ajuda!
    tive alguns problemas em relação ao LIKE OR e AND juntos.

    Sanados! Obrigado!

    Resposta
  • Willian Santana

    Valeu pela dica! Tava um tempão aqui quebrando a cabeça. Abs.

    Resposta
  • Diego Silva

    Obrigado, isso me ajudou de uma forma incrível. Estava quase desistindo até encontrar a solução aqui.

    Resposta
  • Luan Gouveas

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

    Resposta
  • Roberto Horacio

    Muito Obrigado, simples e prático !!

    Resposta
  • Pedro Acauan

    Legal! Bati a cabeça para ajustar um problema com LIKE nas minhas query´s.
    Obrigado pela ajuda!

    Resposta
  • Jessé Benevides

    Como para para utilizar uma variável como parâmetro para o LIKE? Tentei de várias formas e não dá certo. =/

    Resposta
    • Jessé Benevides

      Como faço*.
      PS: Se isso for possível, é claro.

      Resposta
      • Fala Jessé.

        No post eu mostro como fazer.

        Se quiser, me envia o select para eu analisar.

        Abraço

        Tiago

        Resposta
  • Lucimar

    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?

    Resposta
    • 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.

      Resposta
  • Lucas

    Obrigado pelo post, me salvou legal kk

    Resposta
  • 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.

    Resposta
    • Fala Wilder.

      Preciso saber de 2 coisas:
      – qual formato foi definiu para a coluna DATA_NASCIMENTO?
      – qual valor vc está passando para $this->dataNascimento?

      Resposta

Deixe um comentário

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