Fazendo Filtro

PHP

HTML5

05/08/2019

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

Curtidas 0

Respostas

Jothaz

Jothaz

05/08/2019

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.

GOSTEI 0
POSTAR