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

Sistema de busca interna com filtros


buthy

Pergunta

Então galera, estou atrás de um sistema de busca interna para um site de veículos (carros, motos, etc...)

A ideia é cadastrar tudo num banco de dados:

- cidades

- estados

- marcas (ford, vw, chevrolet, peugeot)

- modelos (gol, palio, astra)

- ano fabricação

- ano modelo

- combustível

- tipo (carro, moto, caminhão)

- cor

- preço

- opcionais (ar condicionado, direção hidráulica, vidros elétricos)

A partir disso, gostaria de fazer um sistema de busca simples onde o usuário selecionaria somente a região onde o carro se encontra, a marca e o modelo.

Daí listaria todos os resultados, com um link para o anúncio do veículo.

E também teria as opções de ordenar por valor, por ano, etc.. e um sistema de paginação.

Daí também teria que ter um sistema de busca avançada... Daí teria os filtros, onde o usuário poderia escolher os opcionais, uma faixa de ano (por exemplo listar carros de 2009 a 2012), faixa de preço (R$20.000,00 a R$30.000,00)...

Queria, se possível, que alguém postasse exemplos...

Obrigado

Fico no aguardo!

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Ok, então eu teria que fazer algo assim:

O usuário seleciona estado, cidade e digita o modelo do carro:

$estado = $_GET['estado'];

$cidade= $_GET['cidade'];

$modelo = $_GET['modelo'];

$sql = "SELECT * FROM carros WHERE estado = '$estado' AND cidade = '$cidade' AND modelo LIKE '%$modelo%'";

Seria mais ou menos isso?

Só não entendo direito como funciona a parte dos % e a do _ apos ou antes do nome... Se puder me explicar...

Dai como eu faria para a busca avançada, quando o usuário selecionasse varios opcionais, e quando selecionasse os anos entre 2008 e 2010 por exemplo. Como ficaria isso?

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Putz, mesmo lendo aquilo, continuei sem entender o uso dos % e _ :S

Nesse meu caso, como seria melhor? colocar %$modelo% ou %$modelo ou $modelo% ou com _...

E quanto a busca pelo ano, como ficaria quando a busca fosse entre os anos de 2007 e 2010?

Existe algum comando do SQL que procure entre dois valores?

Outra dúvida que surgiu, é quanto a acentuação...

No Banco de Dados todos estarão cadastrados corretamente, com acentos.

Daí se o usuário digita sem acentos, irá achar algo?

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

  • 0

Se você pesquisar usando:

coluna LIKE 'anten_'

Ele vai procurar por qualquer coisa que comece com "anten" e tenha mais um caractere qualquer (anten1, antena, antenu, etc...)

Se você pesquisar por

coluna LIKE 'anten%'

Ele vai procurar por qualquer coisa que comece por anten (anten1, antendasfdsfsdf, antenas....)

A mesma idéia se começar por % ou estiver entre %%

Vamos as resposta:

Qual é o melhor no seu caso: Não sei. Tem que ver o escopo do teu projeto, eu usaria fulltext para buscar.

Busca pelo ano: use between.

Sobre a acentuação: Todos os BDs MySQL/PG que eu peguei até hoje já estavam configurados para ignorar acentos (ou seja, por exemplo: ação e acao são a mesma coisa pro BD), contudo pode ser necessário configurar isto, pode até ser feito direto na query, aqui tem um artigo sobre isto.

Link para o comentário
Compartilhar em outros sites

  • 0
Ok, então eu teria que fazer algo assim:

O usuário seleciona estado, cidade e digita o modelo do carro:

$estado = $_GET['estado'];

$cidade= $_GET['cidade'];

$modelo = $_GET['modelo'];

$sql = "SELECT * FROM carros WHERE estado = '$estado' AND cidade = '$cidade' AND modelo LIKE '%$modelo%'";

Seria mais ou menos isso?

Só não entendo direito como funciona a parte dos % e a do _ apos ou antes do nome... Se puder me explicar...

Dai como eu faria para a busca avançada, quando o usuário selecionasse varios opcionais, e quando selecionasse os anos entre 2008 e 2010 por exemplo. Como ficaria isso?

Obrigado!

Primeiramente use a função extract em vez de atribuir cada retorno de $_GET: extract($_GET)

depois verifique quais campos estão preenchidos com a função isset(), caso esteja jogue numa

variave $where por exemplo a sua condicao e por ultimo uma variavel $sql que ira receber select

correto da busca. Ex:

Obs: a função extract importa variaveis com o nome de cada campo vindos do _GET e seu devido valor

HTML:

<input ..... id="campo_nome">

<input ..... id="campo_idade">

<input ..... id="campo_descricao">

<input ..... id="campo_datainicial">

<input ..... id="campo_data final">

PHP:

extract($_GET);

if(isset($campo_nome) || $campo_nome != "") $where .= "AND nome = '".$campo_nome."'";
if(isset($campo_idade) || $campo_idade != "") $where .= "AND idade = '".$campo_idade."'";
if(isset($campo_descricao) || $campo_descricao != "") $where .= "AND descricao = '".$campo_descricao."'";
*No caso de uma busca entre datas seria assim:
if(isset($campo_datainicial) || $campo_datainicial != "") $where .= "AND data <= '".$campo_datainicial."'";
if(isset($campo_datafinal) || $campo_datafinal != "") $where .= "AND data >= '".$campo_datafinal."'";
e por ultimo a variavel $sql recebe:
$sql = "SELECT * FROM tabela WHERE 1".$where;

Não custumo ultilizar busca por nome, neste caso cada nome no banco tem um ID onde a busca é feita por este,

mais fica a seu criterio.

o comando LIKE você pode verificar aqui : http://dev.mysql.com/doc/refman/4.1/pt/mysql-indexes.html

Editado por RaphinhaxP
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...