Fazendo Filtro

05/08/2019

0

ola! Estou fazendo um programa de adoção de animais e preciso fazer uma pagina para o usuário visualizar os animais que estão disponíveis para adoção. nessa pagina eu gostaria de fazer fazer um filtro para a pessoa procurar o tipo de animal que gostaria. Nesse filtro conterá, espécie, raça, idade(aprox), sexo do animal, etc.
Todos esses dados estão cadastrados no banco. como faço isso?
Bianca Silva

Bianca Silva

Responder

Posts

05/08/2019

Jothaz

Segue um exemplo de como criar um where dinâmico.

Usando a script abaixo você passa o parâmetros de como informado no bak-end (PHP) e executa a query. Aconselho a criar uma stored procedure, pois o procedimento armazena é melhor gerenciado pelo banco de dados, contudo ser quiser passar a query tudo bem.

create table #temp (nome varchar(30), especie varchar(30), raca varchar(30), idade int, sexo varchar(30))

insert into #temp values ('Mao Tsé-Tung', 'Canis familiaris','yorkshire', 11, 'm' )
insert into #temp values ('Ted bundy', 'Canis lupus','Pug', 5, 'm' )
insert into #temp values ('Isabel Báthory', 'Canis','Dálmata', 2, 'm' )
insert into #temp values ('Myra Hindley', 'Canis familiaris','Pug', 11, 'f' )
insert into #temp values ('Charles Manson', 'Canis lupus','yorkshire', 5, 'm' )
insert into #temp values ('Che Guevara', 'Canis familiaris','Pug', 11, 'f' )
insert into #temp values ('Delphine LaLaurie', 'Canis lupus','yorkshire', 11, 'f' )

declare  @especie varchar(30), @raca varchar(30), @idade int, @sexo varchar(30)
set  @especie = null
set  @raca = 'yorkshire'
set  @idade = null
set  @sexo = null

select	* from #temp
where	(@especie is null OR especie = @especie)
		and (@raca is null OR raca = @raca)
		and (@idade is null OR idade = @idade)
		and (@sexo is null OR sexo = @sexo)

drop table #temp


No select se você passar um valor diferente de NULL para as variáveis ele ignora o filtro do where e retorna todos os registro para aquele condição.
Se você informar um valor qualquer diferente de NULL irá retornar todos os registro cujo o campo da tabela sejam iguais o valo da variavel.

Poe exemplo:

set  @especie = null
set  @raca = 'yorkshire'
set  @idade = null
set  @sexo = null

select	* from #temp
where	(@especie is null OR especie = @especie)
		and (@raca is null OR raca = @raca)
		and (@idade is null OR idade = @idade)
		and (@sexo is null OR sexo = @sexo)



No exemplo acima o resultado será:

nome                           especie                        raca                           idade       sexo
------------------------------ ------------------------------ ------------------------------ ----------- ------------------------------
Mao Tsé-Tung                   Canis familiaris               yorkshire                      11          m
Charles Manson                 Canis lupus                    yorkshire                      5           m
Delphine LaLaurie              Canis lupus                    yorkshire                      11          f


Pois somente foi informado a variável raça.

No exemplo abaixo:

set  @especie = null
set  @raca = 'yorkshire'
set  @idade = 5
set  @sexo = null

select	* from #temp
where	(@especie is null OR especie = @especie)
		and (@raca is null OR raca = @raca)
		and (@idade is null OR idade = @idade)
		and (@sexo is null OR sexo = @sexo)


Irá retornar:

nome                           especie                        raca                           idade       sexo
------------------------------ ------------------------------ ------------------------------ ----------- ------------------------------
Mao Tsé-Tung                   Canis familiaris               yorkshire                      5           m
Charles Manson                 Canis lupus                    yorkshire                      5           m


Pois irá filra raça igual yorkshire e idade igual a 5

Se passa NULL em todas a variáveis vão retornar todos os registro e ignorar o where:

set  @especie = null
set  @raca = null
set  @idade = null
set  @sexo = null

select	* from #temp
where	(@especie is null OR especie = @especie)
		and (@raca is null OR raca = @raca)
		and (@idade is null OR idade = @idade)
		and (@sexo is null OR sexo = @sexo)


nome                           especie                        raca                           idade       sexo
------------------------------ ------------------------------ ------------------------------ ----------- ------------------------------
Mao Tsé-Tung                   Canis familiaris               yorkshire                      5           m
Ted bundy                      Canis lupus                    Pug                            5           m
Isabel Báthory                 Canis                          Dálmata                        2           m
Myra Hindley                   Canis familiaris               Pug                            11          f
Charles Manson                 Canis lupus                    yorkshire                      5           m
Che Guevara                    Canis familiaris               Pug                            11          f
Delphine LaLaurie              Canis lupus                    yorkshire                      11          f


Parece confuso, mas é simples e funciona muito bem.

Qualquer dúvida por favor se manifestar.

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar