Jump to content
Fórum Script Brasil
  • 0

Sistema de busca interna com filtros


buthy

Question

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 to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

De como fazer um sistema de busca com filtros...

Pesquisei sobre e vi que se usa o comando LIKE do MySQL

Mas queria algum exemplo utilizando o PHP juntamente com esses filtros do MySQL

Conhecimento em PHP: intermediário

Fico no aguardo, obrigado!

Link to comment
Share on other 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!

Link to comment
Share on other 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?

Edited by buthy
Link to comment
Share on other 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 to comment
Share on other 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

Edited by RaphinhaxP
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...