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?
Todos esses dados estão cadastrados no banco. como faço isso?
Bianca Silva
Curtir tópico
+ 0
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.
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:
No exemplo acima o resultado será:
Pois somente foi informado a variável raça.
No exemplo abaixo:
Irá retornar:
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:
Parece confuso, mas é simples e funciona muito bem.
Qualquer dúvida por favor se manifestar.
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
Clique aqui para fazer login e interagir na Comunidade :)