BEM VINDO AO BLOG DO MARCOS CARRARO CRIADOR DO "CARRARO DASHBOARD". MUITO MAIS QUE UM SIMPLES BLOG.
Mostrando postagens com marcador MariaDB. Mostrar todas as postagens
Mostrando postagens com marcador MariaDB. Mostrar todas as postagens

quarta-feira, 13 de novembro de 2013

Consultas Avançadas SQL - group_concat if/else

Buenas,

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.

Read More

quarta-feira, 30 de outubro de 2013

Erro MariaDB/Mysql com MysqlWorkbench mysql.proc

Buenas,

Se você esta tendo problemas ao sincronizar o modelo que esta no workbench com o DB, o mesmo retorna o seguinte erro.

"Exception: Cannot load from mysql.proc. The table is probably corruptedFetching schema list"

Para resolver é simples.

No linux entre com o comando.

# mysql_upgrade -u root -p

Feito isso é so correr para o abraço.

abraços!
marcos carraro
Read More

sexta-feira, 25 de outubro de 2013

MariaDB no Centos 6.4 x64

Buenas,

Que tal migrar para MariaDB???

Bora lá.

# cd /etc/yum.repos.d/
# vim MariaDB.repo

Cole o seguinte conteúdo.

# MariaDB 10.0 CentOS repository list - created 2013-10-25 17:24 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# yum clean all
# yum update

# yum remove mysql mysql-server

# yum install MariaDB-server MariaDB-client MariaDB-cassandra-engine

Pergunta: Mas Marcos eu não uso centos!
Resposta: Meu caro amigo(a) então.
https://downloads.mariadb.org/mariadb/repositories/


Abraços
Marcos Carraro.


Read More

Posts que a turma mais esta lendo...

Posts que a turma mais esta lendo...

Marcos Carraro