Postagens

MySQL - Dump de banco de dados sem a estrutura de tabelas

É com certeza uma das práticas mais comuns entre os profissionais que trabalham com banco de dados o backup ou restore de dados. Para isso é muito comum o uso do mysqldump . Em sua configuração padrão o mysqldump , além de copiar os dados da banco também copia toda a estrutura de tabelas e índices. $ mysqldump -uusername -psenha database > /diretorio/backup.sql Porém existem algumas situaçães em que o Dump de uma tabela ou banco não serve apenas para backup. Uma delas, por exemplo, é quando precisamos recriar algum índice novo para a tabela, a fim de melhorar o desempenho. Quem já trabalhou com índices saberá de antemão que lidar com eles em tabelas com milhões de registros, atualizando, trocando, deletando ou criando é um verdadeiro inferno, já que muitas vezes o processo leva horas, quando não dias. Eu mesmo, certa vez, tive que deletar um indice de uma tabela com alguns milhões de registros e me arrependi brutalmente pois levaram 'apenas' 8 horas para o process...

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

Em PHP temos uma função não tão conhecida, str_pad() , que completa uma string com qualquer caractere até uma quantidade definida pelo programador. Esta função é extremamente útil no caso de codificações padronizadas onde a quantidade de caracteres deve ser sempre fixa. No MySQL temos uma função equivalente chamada LPAD() . A sintaxe desta função é LPAD(CAMPO,QUANTIDADE DE CARACTERES,CARACTERE PARA COMPLETAR) Vamos fazer uma query na tabela exemplo 'produtos' abaixo: cod | nome | valor 3 | Iphone | 3000.00 10 | Blue Ray | 1800.00 230| Book | 30.00 Vamos supor que o padrão de código exigido pelo sistema que lê o banco de dados seja de cinco (5) caracteres. Valores menores que este deverão ser preenchidos com zeros a esquerda SELECT LPAD(cod,5,'0') AS cod, nome,valor FROM produtos Teremos como resultado: cod | nome | valor 000003 | Iphone | 3000.00 000010 | Blue Ray | 1800.00 000230 | Book | 30.00 Assi...

MySQL - Gerando arquivos .csv com cabeçalho e acentuação diretamente de uma query no banco de dados

Já tratamos anteriormente de como gerar um arquivo a partir de uma consulta no MySQL porém não falamos especificamente de arquivos .CSV (aqueles separados por ponto e vírgula e que são reconhecidos diretamente pelos editores de planilha) Além disso não tratamos também de como inserir um cabeçalho com os nomes dos campos e nem como esta saída ser gerada diretamente com acentuação, importante para nós que trabalhamos com o português. Vamos começar com nosso exemplo padrão Para DOS SELECT * INTO OUTFILE 'C:/diretorio/arquivo.txt' FROM tabela Para Linux SELECT * INTO OUTFILE '/diretorio/arquivo.txt' FROM tabela As queries acima geram arquivos com acentuação no padrão UTF8, fora do padrão .csv e sem cabeçalho. Vamos transformar as queries acima para que a saída esteja no padrão .csv SELECT * FROM tabela INTO OUTFILE 'C:/diretorio/arquivo.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LIN...

MySQL - Gerando um arquivo externo com o resultado de uma Query pela linha de comando - INTO OUTFILE

Se você necessita que a resposta a uma Query SQL seja gerada em um arquivo basta utilizar a declaração INTO OUTFILE e direcionar o arquivo para o lugar que quiser. O que INTO OUTFILE faz, na verdade, é mudar a saída padrão da tela para um arquivo. Vamos ver os exemplos abaixo: No caso do PROMPT de comando do DOS SELECT * INTO OUTFILE 'C:/diretorio/arquivo.txt' FROM tabela ou no Linux SELECT * INTO OUTFILE '/diretorio/arquivo.txt' FROM tabela Um arquivo com a saída da sua Query está pronto!

MySQL - Fazendo Insert com Subquery

Imagem
Muitas pessoas utilizam scripts PHP para ler dados de uma tabela do DB e jogar em outra porém isso pode ser feito diretamente através do MySQL de maneira muito fácil e muito mais rapidamente. Vamos a um exemplo em que lemos os nomes femininos de uma tabela 'nome' e os referenciamos em uma tabela chamada 'empresarias'. Tabela 'nome' id | nome | genero 1 Pedro m 2 Souza m 3 Santiago m 4 Ana f 5 Rosa f 6 Tom m 7 Tobias m 8 Otavio m 9 Hugo m Tabela 'empresarias' com o campo 'id' AUTO INCREMENT id | id_nome Se fizermos um Select simples da tabela 'nome': SELECT * FROM nome WHERE genero = 'f' Teremos como resultado id | nome | genero 4 Ana f 5 Rosa f Ok, são estes dados que queremos referenciar na tabela 'empresarias'. Como proceder agora? Podemos inserir diretamente os dados de uma tabela em outra u...

PHP: Usando o str_pad() para completar strings que necessitam de um tamanho mínimo.

A função  str_pad() do PHP é uma daquelas que ficam escondidas ali e muito pouca gente sabe para que serve. Estas funções "escondidas" podem mostrar-se muito úteis na hora de resolver problemas aparentemente complexos ou chatos. O str_pad() completa strings de forma que elas fiquem sempre com um tamanho mínimo. Vamos ver alguns exemplos abaixo: <?php $input = "Exemplo"; echo str_pad($input, 10); echo "<br>"; echo str_pad($input, 10, "-=", STR_PAD_LEFT); echo "<br>"; echo str_pad($input, 10, "-=", STR_PAD_RIGHT); echo "<br>"; echo str_pad($input, 10, "_", STR_PAD_BOTH); echo "<br>"; echo str_pad($input, 2 , "___"); O código acima retorna as seguintes saídas: Exemplo -=-Exemplo Exemplo-=- _Exemplo__ Exemplo $input é sua string original. O parâmetro seguinte é o n...

AngularJS - Aplicando filters através do Controller

Trabalhar com data pode ser bem chato, porém com o Angular JS é muito tranquilo. Vamos criar um script que pega a data atual e a formata no padrão brasileiro, ou seja, Dia/Mês/Ano hora:minuto:segundo. Segue abaixo o exemplo: <html ng-app="app"> <head> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script> <script> var appModule = angular.module('app', []); function General($scope, $element, $http, $filter) { $scope.datahora = $filter('date')(new Date(), 'yyyy-MM-dd HH:mm:ss'); } </script> </head> <body ng-controller="General"> <p>Data</p> <span>{{datahora}}</span> </body> </html> 'General' é nosso controller. O detalhe aqui é incluir o parâmetro ' $filter ' na declaração da função do controller. Com isso poderemos trabalhar com os filtr...