Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Filtro de resultado de pesquisa igual a sites de compras


lvazquez

Question

Olá galera do Script brasil, gostaria da ajuda de vocês para me orientarem em como faço para criar um sistema de filtro igual ao sites de compras, por exemplo igual ao do Mercado Livre que ao pesquisar por algo, a página carrega e tem opções de filtro, como categoria, produto novo ou usado, estado entre outros, e como fazer para que ele traga ao lado de cada opção o número de resultados que terá optando por este termo, e como fazer tudo isso funcionar, ou seja ao clicar ele ir filtrando.

Pode tanto ser com parametros por url ou session não tem problemas.

Já tenho as tabelas prontas no banco de dados, fazer a consulta é tranquilo, o problemas é como criar esse filtro.

Obrigado

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Se você for passar os dados pela query, teria que fazer verificações com if/else para ir compondo o where, onde seria usado o filtro.

$where = '';

if($_GET['status'] == 'novo'){
$where .= "status = 'novo'";
}elseif($_GET['status'] == 'usado'){
$where .= "status = 'usado'";
}


$sql = mysql_query("SELECT... WHERE $where...");

Link to comment
Share on other sites

  • 0
Se você for passar os dados pela query, teria que fazer verificações com if/else para ir compondo o where, onde seria usado o filtro.

$where = '';

if($_GET['status'] == 'novo'){
$where .= "status = 'novo'";
}elseif($_GET['status'] == 'usado'){
$where .= "status = 'usado'";
}


$sql = mysql_query("SELECT... WHERE $where...");

Ok.

Mas isso no caso de ter apenas duas opções. No caso de ter que fazer com diversas opções, das quais variam de acordo com o que tem cadastrado no banco?

E como ir "acumulando" as escolhas do usuário, por exemplo, escolhi novo, ai recarrega a pagina com as opções de filtro que há nos itens com o termo pesquisado e quem são novos, e depois se eu escolher, por exemplo, categoria X, meretornar o resultado no termo pesquisado, novo e da categoria X?

Edited by lvazquez
Link to comment
Share on other sites

  • 0

É só ir adicionando ifs....

$where = '';

if($_GET['status'] == 'novo'){
$where .= "status = 'novo'";
}elseif($_GET['status'] == 'usado'){
$where .= "status = 'usado'";
}

if(isset($_GET['categoria'])){
$where .= "categoria = '".$_GET['categoria']."'";
}


$sql = mysql_query("SELECT... WHERE $where...");

Link to comment
Share on other sites

  • 0
É só ir adicionando ifs....

$where = '';

if($_GET['status'] == 'novo'){
$where .= "status = 'novo'";
}elseif($_GET['status'] == 'usado'){
$where .= "status = 'usado'";
}

if(isset($_GET['categoria'])){
$where .= "categoria = '".$_GET['categoria']."'";
}


$sql = mysql_query("SELECT... WHERE $where...");
Uma Coisa que estava olhando agora, você está concatenando o $where, dessa forma tudo o que fosse filtrado ficaria dentro da variável, correto? Caso esteja correto acho que entendi a lógica. Mas no momento da consulta ou melhor do SELECT, ficaria como? Por exemplo:
$_GET['prod'] //seria o produto pesquisado
$_GET['categoria']
$_GET['pagamento'] // seria as formas de pagamento

porém cada uma deveria buscar em uma tabela diferente, onde estão associadas pelo id da loja que está anunciando o produto.

de que forma retornaria o id_empresa que possui os parâmetros filtrados?

obrigado

Edited by lvazquez
Link to comment
Share on other sites

  • 0
Primeiro monte a consulta sem nenhum filtro, depois é só colocar os filtros de acordo com os relacionamentos existentes nas tabelas. Assim se o filtro não existir a consulta funcionará no mesmo jeito.

Olá. Desculpa a demora em dar retorno mas tava numa correria só por aqui.

Olha só, sua dica foi ótima, funcionou e aprendi em como fazer, porém fiquei com um pequeno problema, vou explicar melhor como está e o que eu preciso.

Tenho um guia online, neste guia estão algumas empresas cadastradas, quando o usuário pesquisar por palaras-chave da empresa, vai a uma página, por ex, resultado.php, nesta página lista todas as empresas com o termo pesquisado, e ao lado terá a opção de filtrar por:

Categoria das empresas (será listado dinamicamente), ex.: restaurante, farmácia, serviços, comércio.

Diferenciais (também dinamicamente) ex.: ar condicionado, segurança, estacionamento

Se o usuário escolhe uma categoria e /ou um diferencial, tranquilo sem problemas.

Mas como fazer pra que ele possa selecionar dois diferenciais?

Ao incluir uma segunda condição no select não funciona, acontece mais ou menos isso:

tabela diferencial

id_diferencial | id_empresa(onde associa com o cadastro) | diferencial

1 3 segurança

2 3 estacionamento

e supomos que busquei por 'mercado', ao abrir o resultado com os mercado listados, quero filtrar por segurança,

aparecerá a empresa 3 pois a consulta fica assim:

SELECT  DISTINCT cadastro_empresa.id_empresa, //coloquei assim para não repetir a mesma empresa no resultado
cadastro_empresa.nome_fantasia FROM cadastro_empresa INNER JOIN indice_empresa INNER JOIN facilidades_empresa ON cadastro_empresa.id_empresa = indice_empresa.id_empresa AND facilidades_empresa.id_empresa = indice_empresa.id_empresa WHERE indice_empresa.palavra_chave LIKE '%mercado%' AND facilidades_empresa.facilidades = 'segurança'
dessa forma funciona certo, porém se após filtrar por segurança eu também querer filtrar por estacionamento, o códgio ficaria assim:
SELECT  DISTINCT cadastro_empresa.id_empresa, //coloquei assim para não repetir a mesma empresa no resultado
cadastro_empresa.nome_fantasia FROM cadastro_empresa INNER JOIN indice_empresa INNER JOIN facilidades_empresa ON cadastro_empresa.id_empresa = indice_empresa.id_empresa AND facilidades_empresa.id_empresa =  indice_empresa.id_empresa WHERE indice_empresa.palavra_chave LIKE '%mercado%' AND facilidades_empresa.facilidades = 'segurança' AND facilidades_empresa.facilidades = 'estacionamento'

O código parece estar certo, porém não resulta em nenhum resultado, somente tem resultado se o diferencial fosse "segurança estacionamento" no mesmo id_diferencial.

Como posso consultar por mais de um termo na mesma coluna da tabela?

Espero ter sido claro.

Grato

Link to comment
Share on other sites

  • 0

Neste caso teria que usar o OR:

WHERE indice_empresa.palavra_chave LIKE '%mercado%' AND (facilidades_empresa.facilidades = 'segurança' OR facilidades_empresa.facilidades = 'estacionamento')
Ou poderia ver se o IN cabe, tipo
WHERE indice_empresa.palavra_chave LIKE '%mercado%' AND facilidades_empresa.facilidades IN ('segurança','estacionamento')

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