Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa conforme critérios escolhidos


3l3tr1c

Pergunta

Olá!

Imaginem um formulário de busca interna, onde existem três critérios para a busca. Não necessariamente os três critérios devem ser preenchidos. Os critérios são, p. ex.: Marca, Modelo, Cor.

O usuário UM vai realizar uma pesquisa e escolhe: Marca: ALFA; Modelo: XY; Cor: "Deixou em branco".

O usuário DOIS vai realizar uma pesquisa e escolhe: Marca: SIGMA; Modelo: ZG; Cor: Azul.

Se no código eu por: "SELECT * FROM tabela WHERE marca= varMarca OR modelo= varModelo OR cor= varCor" irei ter problemas, pois se o usuário escolher uma marca específica, um modelo e uma cor a QUERY irá retornar tudo que conter a marca escolhida, o modelo e a cor, ou seja não irá filtar corretamente. Mas o usuário pode querer somente uma marca um modelo e a cor pode ser qualquer uma, e irá acontecer o mesmo... a query irá trazer todas as marcas independente do modelo. Entendem??

Então, o que devo fazer?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

após o preenchimento teste os valores antes de colocar no select

Teste ai :

$Complemento = " id is not null "

if($varMarca)

$Complemento .= " or marca= '$varMarca' ";

if($varModelo)

$Complemento .= or modelo = '$varModelo' ";

if($varCor)

$Complemento .= " or cor = '$varCor' ";

SELECT * FROM tabela WHERE $Complemento"

Link para o comentário
Compartilhar em outros sites

  • 0
após o preenchimento teste os valores antes de colocar no select

Teste ai :

$Complemento = " id is not null "

if($varMarca)

$Complemento .= " or marca= '$varMarca' ";

if($varModelo)

$Complemento .= or modelo = '$varModelo' ";

if($varCor)

$Complemento .= " or cor = '$varCor' ";

SELECT * FROM tabela WHERE $Complemento"

Antes de mais nada obrigado Jissa pela atenção.

Então, eu fiz o que voce disse e não deu resultado algum. Talvez não seja assim... Vou tentar explicar melhor. Os itens selecionas na pesquisa funcionarão como um arranjo, p. ex.: Marca: ALFA Modelo: X OU Marca: ALFA Modelo: "todos". Eu até consigo fazer colocando o AND, só que o internauta vai ter que obrigatoriamente por a MARCA e o MODELO, ora ele pode somente escolher a marca e o modelo pode ser todos.

Link para o comentário
Compartilhar em outros sites

  • 0

tente fazer dessa forma acompanhando o raciocínio do nosso colega Jissa:

if($varMarca)

$Complemento = " or marca= '$varMarca' ";

if($varModelo)

$Complemento = or modelo = '$varModelo' ";

if($varCor)

$Complemento = " or cor = '$varCor' ";

SELECT * FROM tabela WHERE $Complemento" ;

corrigindo:

if($varMarca)

$Complemento = " marca= '$varMarca' ";

if($varModelo)

$Complemento = "modelo = '$varModelo' ";

if($varCor)

$Complemento = "cor = '$varCor' ";

SELECT * FROM tabela WHERE $Complemento" ;

Link para o comentário
Compartilhar em outros sites

  • 0

unica coisa ai que só vai pesquisar um

$Complemento = " marca= '$varMarca' ";

teria que concatenar para se escolher mais de um criterio

Acho que se manter o que passei trocar o OR por AND

eu segui o que voce havia colocado no primeiro post, o correto é o AND

Se o usuario prencher um vai pegar apenas ele, se preencher dois vai pegar o 1 E 2

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui, graças a Jissa e ao Anarquista. O campo Codigo/ID também fará parte da pesquisa e na var Complemento eu estou passando ao interpretador que ele não é nulo, mas o usuário pode deixá-lo em branco. Caso isso ocorra acontecerá um erro e não haverá resultados.

Como ficou o código:

$varMarca = $_GET['marca'];
$varModelo = $_GET['modelo'];
$varCodigo = $_GET['codigo'];

$Complemento = " id is not null ";

if($varMarca ){
$Complemento .= " AND marca= '$varMarca ";
}

if($varMdelo){
$Complemento .=" AND modelo= '$varMdelo";
}

if($varCodigo ){
$Complemento .=" AND id = '$varCodigo ";
}

$Pesquisa = "SELECT * FROM tabela WHERE $Complemento";

Obs.: os nomes Marcas, Modelos e Codigo são meramente ilustratívos.

Editado por 3l3tr1c
Link para o comentário
Compartilhar em outros sites

  • 0

Com a ajuda de outras pessoas, de outros fóruns, do Jissa e do Anarquista eu consegui resolver o problema.

Ficou assim:

$Complemento = 1; /* isso é uma Guambiarra para evitar o problema que eu citei acima */
$varMarca = $_GET['marca'];
$varModelo = $_GET['modelo'];
$varCodigo = $_GET['codigo'];
if($varMarca ){
$Complemento .= " AND marca= '$varMarca ";
}
if($varMdelo){
$Complemento .=" AND modelo= '$varMdelo";
}
if($varCodigo ){
$Complemento .=" AND id = '$varCodigo ";
}
$Pesquisa = "SELECT * FROM tabela WHERE 1=$Complemento"; /* observem que a guambiarra se repete aqui*/
Ah!! Eu consegui fazer outra coisa também que tava dando muita dor de cabeça. Eu queria filtrar os itens da pesquisa por preço... Tipo menor valor e maior valor. Então eu fiz:
$varMenor = $_GET['menor'];
$varMaior = $_GET['maior'];
if($varMenor.$varMaior){
$Complemento .= " AND valor BETWEEN '$varMenor' AND '$varMaior'";
}

Obs.: o usúario deverá digitar os números, menor e maior, sem ponto e sem vírgula. Caso contrário não haverá resultados. Outra coisa, essa parte do ponto e da vírgula, moeda, eu não consegui resolver...

Editado por 3l3tr1c
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...