Hoje vai algumas dicas de consultas em SQL, muitas dicas legais...
Primeiro de tudo vamos verificar o group_concat();
- A consulta normal retorna...
MariaDB [db_painel]> select * from tb_ips;
+-------+---------------+------------+-------------------+-----------------------+------+
| id_ip | range_ip | mascara_ip | host | descricao_ips | tipo |
+-------+---------------+------------+-------------------+-----------------------+------+
| 2 | 192.168.1.0 | 7 | NULL | Rede Interna | r |
| 6 | 10.0.0.1 | 14 | fw | Firewall principal | h |
| 10 | 192.168.1.101 | 14 | oracle | Servidor Oracle Focco | h |
| 11 | 10.0.0.0 | 10 | NULL | DMZ | r |
| 12 | 172.16.1.0 | 8 | NULL | EXTERNA | r |
| 13 | 192.168.1.120 | 8 | bkp | Servidor de bkp | h |
| 14 | 0.0.0.0 | 1 | NULL | QUALQUER REDE | r |
| 15 | 201.2.55.99 | 15 | NULL | LINK 2 | r |
| 16 | 172.16.1.1 | 8 | TS | TS w2k8 SERVER2 | h |
| 17 | 8.8.8.8 | 1 | google-dns | google-dns | h |
| 18 | 8.8.4.4 | 15 | google-dns2-teste | google-dns2-teste | h |
+-------+---------------+------------+-------------------+-----------------------+------+
11 rows in set (0.00 sec)
Repare que os ips tem um tipo R para REDE e H para HOST, então vamos agrupar tudo que for HOST e tudo que for REDE.
MariaDB [db_painel]> select tipo,group_concat(descricao_ips,'=',range_ip,' ') as grupos from tb_ips group by tipo;
+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tipo | grupos |
+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| h | google-dns2-teste=8.8.4.4 ,google-dns=8.8.8.8 ,TS w2k8 SERVER2=172.16.1.1 ,Servidor de bkp=192.168.1.120 ,Servidor Oracle Focco=192.168.1.101 ,Firewall principal=10.0.0.1 |
| r | EXTERNA=172.16.1.0 ,DMZ=10.0.0.0 ,QUALQUER REDE=0.0.0.0 ,LINK 2=201.2.55.99 ,Rede Interna=192.168.1.0 |
+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Então, repare que a query ficou assim.
> select tipo,group_concat(descricao_ips,'=',range_ip,' ') as grupos from tb_ips group by tipo;
Aqui vamos montar os grupos pelo seu tipo, então tudo que for do tipo 'H' vai concatenar pela descricao+IP, e dando um espaço.
Se for usar em alguma pagina php, ou html pode fazer a quebra
> select tipo,group_concat(descricao_ips,'=',range_ip,'<br>') as grupos from tb_ips group by tipo;
-- if/else no sql
Na verdade aqui vamos utilizar o 'case' do mysql, ele fica mais fácil de entender em uma grande consulta.
Vamos fazer da seguinte maneira, se for do tipo H vai mostrar HOST, se for do tipo R vai mostrar REDE.
MariaDB [db_painel]> select (CASE WHEN tipo='r' then 'REDE' ELSE 'HOST' END) AS TIPO_DECODE,tipo from tb_ips;
+-------------+------+
| TIPO_DECODE | tipo |
+-------------+------+
| REDE | r |
| HOST | h |
| HOST | h |
| REDE | r |
| REDE | r |
| HOST | h |
| REDE | r |
| REDE | r |
| HOST | h |
| HOST | h |
| HOST | h |
+-------------+------+
11 rows in set (0.00 sec)
Então a clausula CASE funciona da seguinte maneira.
(CASE WHEN tipo='r' THEN 'REDE' // Se tipo for igual a R então imprime REDE
ELSE 'HOST' // Se não for do tipo R no caso vai ser do tipo H, então por sua vez imprime HOST
END) // Finaliza o bloco.
Você pode estar se pensando e se quero validar mais informações.... poderia implementar um case dentro do outro...
(CASE WHEN tipo='r' THEN 'REDE'
ELSE ( (CASE WHEN tipo='h' THEN 'HOST'
ELSE 'TIPO DESCONHECIDO'
END) )
END)
Repare que aqui já temos os dois CASE dentro um do outro, e assim pode fazer uma pilha....
SQL ainda tem muito mais funções, é espetacular...
Vale lembrar que quanto menos linhas de código o sistema tiver mais performático ele vai ser, pois são menos tratamentos na programação para validar os dados.
abraços
marcos carraro.
Nenhum comentário:
Postar um comentário