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

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


lvazquez

Pergunta

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 para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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?

Editado por lvazquez
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por lvazquez
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 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,2k
    • Posts
      652k
×
×
  • Criar Novo...