none
Consulta para filtro de busca com várias categorias RRS feed

  • Pergunta

  • Olá,

    eu tenho uma busca de clientes onde eu posso buscar esses clientes de varias maneiras: eu posso buscar pelo telefone, nome, cidade...

    até ai tudo bem, mas eu preciso buscar ele por grupos,categorias,subcategorias.

    onde um cliente pertence apenas a um grupo, varias categorias e varias subcategorias.

    ou seja,

    Eu vou listar todas as categorias e subcategorias e o usuario vai selecionar quais as categorias para realizar a busca.

    onde eu tenho que retornar todos os clientes que estiverem nas categorias e subcategorias selecionadas.

    Como que eu faço isso?

    Estou fazendo esse projeto em asp.net c# com procedures e sql server 2008

    Vou postar abaixo a procedure que fiz até agora onde só falta essa questão da busca por  categorias e subcategorias:

    ALTER PROCEDURE [dbo].[sp_ListaClientesGerencia]

    @IdCliente int,

    @Nome varchar(150),

    @Estado varchar(22),

    @Cidade int,

    @Grupo int,

    @Categoria varchar(200),

    @SubCategoria varchar(200),

    @Telefone varchar(13)

    AS

    BEGIN

    DECLARE @sql varchar(700) = 'SELECT c.idcliente,c.fantasia,c.bairro,c.endereco,c.numero,c.cep,c.estado,c.telefone,c.celular,ci.nome as nomecidade FROM cliente AS c INNER JOIN cidades AS ci ON c.idcidade=ci.idcidade INNER JOIN cliente_subcat as sub ON sub.idcliente = c.idcliente INNER JOIN subcategoria as subcat ON subcat.idsubcat = sub.idsubcat INNER JOIN categoria as cat ON cat.idcategoria = subcat.idcategoria INNER JOIN grupo ON grupo.idgrupo = cat.idgrupo WHERE 1=1'

    IF (@IdCliente <> 0)

    SET @sql = @sql + ' AND c.idcliente='+CONVERT(VARCHAR,@IdCliente)

    IF (@Nome <> '')

    BEGIN

    SET @sql = @sql + ' AND c.fantasia like %'''+CONVERT(VARCHAR,@Nome)+''''

    END

    IF (@Estado <> '')

    SET @sql = @sql + ' AND c.estado='''+CONVERT(VARCHAR,@Estado)+''''

    IF (@Cidade <> 0)

    SET @sql = @sql + ' AND c.idcidade='+CONVERT(VARCHAR,@Cidade)

    IF (@Grupo <> 0)

    SET @sql = @sql + ' AND grupo.idgrupo='+CONVERT(VARCHAR,@Grupo)

    IF (@Categoria <> '')

    SET @sql = @sql + ' AND cat.idcategoria='+CONVERT(VARCHAR,@Categoria)

    IF (@SubCategoria <> '')

    SET @sql = @sql + ' AND sub.idsubcat='+@SubCategoria

    IF (@Telefone <> '')

    SET @sql = @sql + ' AND c.telefone='+@Telefone+' OR c.celular='+@Telefone

    EXECUTE(@sql)

    END

     

    Obrigado

    segunda-feira, 13 de junho de 2011 17:53

Respostas

  • Murilo, pelo que vi, parece que você já faz os Join's necessários com suas tabelas de Categoria e SubCategoria.

    Porque não usa o operador "In" para filtrar as categorias e subcategorias? Bastaria passar o parâmetro já com as informações separadas por vírgula. Ex: @ParametroCategoria = 'categ_1','categ_2','categ_3'.

    IF (@Categoria <> '')

      SET @sql = @sql + ' AND cat.idcategoria in (' + @Categoria + ')'

     

    IF (@SubCategoria <> '')

     SET @sql = @sql + ' AND sub.idsubcat in (' + @SubCategoria + ')'


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Murilo Bom segunda-feira, 13 de junho de 2011 19:27
    segunda-feira, 13 de junho de 2011 18:43

Todas as Respostas

  • Murilo, pelo que vi, parece que você já faz os Join's necessários com suas tabelas de Categoria e SubCategoria.

    Porque não usa o operador "In" para filtrar as categorias e subcategorias? Bastaria passar o parâmetro já com as informações separadas por vírgula. Ex: @ParametroCategoria = 'categ_1','categ_2','categ_3'.

    IF (@Categoria <> '')

      SET @sql = @sql + ' AND cat.idcategoria in (' + @Categoria + ')'

     

    IF (@SubCategoria <> '')

     SET @sql = @sql + ' AND sub.idsubcat in (' + @SubCategoria + ')'


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Murilo Bom segunda-feira, 13 de junho de 2011 19:27
    segunda-feira, 13 de junho de 2011 18:43
  • Vlw cara

    era disso mesmo que eu estava precisando :D

    segunda-feira, 13 de junho de 2011 19:27