Usuário com melhor resposta
Consulta para filtro de busca com várias categorias

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