Postagens

Mostrando postagens de 2014

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

PHP - Utilizando proxy e CURL para acessar servidores ou sites

Imagem
Proxies são extremamente úteis, principalmente para usuários avançados, e se você não sabe exatamente o que são recomendo a leitura deste artigo da Wikipedia . Resumidamente um proxy é uma máquina que fica entre você e a Internet. Acessar a Web por um proxy fará com que os servidores que você acessa enxerguem não o seu endereço mas o endereço desta máquina intermediária. Você pode precisar utilizar um proxy caso a rede da sua empresa não permita acessar um Facebook, Twitter ou outro site qualquer, caso seu IP tenha sido bloqueado por algum administrador de site, queira testar o acesso de diferentes usuários em seu site e outros usos menos ortodoxos. Por suas características peculiares proxies devem ser usados com cuidado, principalmente se você pensa em acessar serviços utilizando alguma senha. Hoje vamos criar uma classe que utilizará um proxy para acessar qualquer URL com a ajuda do CURL do PHP. Vamos considerar que o proxy que você utiliza é aberto, ou seja, não necess

Linux - Utilizando o comando DIFF para comparar diferenças entre arquivos em diferentes pastas

Um comando do Shell Linux muito interessante e útil é o 'diff'. Utilizo ele tanto para verificar as diferenças entre arquivos gerados por um sistema em que fiz alguma atualização quanto para verificar diferenças no código entre versões de arquivos de aplicações. Sua utilização é muito simples: $ diff /diretorio1 /diretorio2 | cat > /diretoriodesaida/diferencas.txt Explicando o comando acima: 'diff' verifica a diferença entre os arquivos nas pastas 'diretorio1' e 'diretorio2', inclusive diferenças dentro dos arquivos. '| cat > /diretoriodesaida/diferencas.txt' direciona a saída padrão da tela para um arquivo, ou seja, os resultados da análise poderão ser checados no arquivo 'diferencas.txt' Dentro do arquivo gerado 'diferencas.txt' estão indicados todos os trechos que foram modificados entre dois arquivos de mesmo nome ou as diferenças entre quantidades de arquivos.

MySQL - Filtrando CEP com a ajuda do REGEXP

Vamos a uma dica rápida de REGEXP, utilizando como base a seleção de linhas em uma tabela que possuem CEP preenchido. Nossa tabela possui a seguinte estrutura: ID Endereço CEP 1 Rua peruibe 459 05698426 2 Rua martim 67 - 3 Av Rebouças 1000 08968547 Para selecionar apenas as linhas que possuem CEP utilizamos a seguinte Query: SELECT ID,ENDERECO,CEP FROM tabela WHERE CEP REGEXP '^0[0-9]{7}$'  O que nossa REGEXP faz? ^0  : faz com que o MySQL olhe a partir do primeiro caractere e pegue apenas os valores com zero; [0-9]{7}  : após o primeiro caractere, que deve ser zero, pega os campos cujos próximos 7 valores sejam numéricos $  : finaliza o REGEXP, ignorando tudo mais que venha depois dos oito caracteres numéricos indicados anteriormente. O resultado da Query seria: ID Endereço CEP 1 Rua peruibe 459 05698426 3 Av Rebouças 1000 08968547 Abraço!

SQL JOINS - Um infográfico muito bacana que ajuda a entender melhor os JOINS

Imagem
JOINS de SQL geralmente são chatinhos de visualizar mas, apesar disso, são extremamente úteis, principalmente em bancos de dados cuja estrutura está normalizada. Para melhorar este cenário e facilitar a compreensão segue abaixo um infográfico que explica de maneira visual o que cada tipo de JOIN faz. Obs: infelizmente no MySQL não existe FULL OUTER JOINs. Para fazer isso são necessários alguns truques utilizando UNION de duas ou mais seleções utilizando LEFT e RIGHT JOINs.

Javascript - Comportamentos diferentes para incremento de valores com ++ antes e depois da variável

Hoje vamos tratar de algo que aparentemente é muito bobo mas que na verdade não o é e costuma trazer grandes problemas quando utilizado de maneira errada: o incremento em variáveis. O incremento está presente em inúmeras linguagens de programação. Os exemplos que apresentarei aqui são baseados em Javascript , porém eles são válidos também para PHP e outros. Acredito que todos sabem que para incrementar ou decrementar (adicionar ou subtrair) uma unidade a uma variável, ao invés de fazer isso: $a = $a + 1 Podemos fazer isso: $a++ ou isso: ++$a Bem, acredito que todos sabem deste truque, mesmo porque é a primeira coisa que aprendemos quando iniciamos na arte de programar, porém você sabe qual a diferença entre ambos? Vamos rodar um javascript bem simples para exemplificar o que acontece: $a = 0; $b = 0; $a++; ++$b; console.log($a); console.log($b); É provável que você obtenha como resultado: 1 1 Bem, até ai parece que não existem diferenças, correto? Inic

PHP - Pulando linhas do resultado de uma Query com mysql_data_seek()

mysql_data_seek() move o ponteiro interno do resultado de uma Query MySQL para o número da linha especificada. A próxima chamada de uma função, por exemplo mysql_fetch_assoc (), irá retornar esta linha. mysql_data_seek()  é muito útil quando se quer trabalhar com paginações, por exemplo. Vamos a um exemplo simples, sem o uso do  mysql_data_seek() , onde uma tabela simples com ID e nome é consultada. <?php include "db.php"; $result = mysql_query("SELECT * FROM ident"); while ($row = mysql_fetch_array($result))  { echo "ID: {$row['id']}, Nome: {$row['nome']} <br/>"; } O Resultado é: ID: 1, Nome: Daniel ID: 2, Nome: Salete ID: 3, Nome: Veronica ID: 4, Nome: Mona ID: 5, Nome: Zilda ID: 6, Nome: Ofelia ID: 7, Nome: Patricia Agora vamos utilizar  mysql_data_seek() . Vamos pular o resultado da consulta da linha 0 para a linha 5 e repetir o loop: <?php include "db.php"; $result =

PHP - Rodando PHP pela linha de comando: passando parâmetros

Imagem
Para quem não sabe o PHP pode ser rodado via linha de comando, seja no Linux, DOS ou MAC e não somente via browser. Podemos rodar um script desta forma (no DOS): c: \xampp\htdocs\>php meuscript.php Pelo browser podemos passar parâmetros usando os caracteres ? e & como separadores localhost/meuscript.php?parametro=linha E no script 'pegamos' este parâmetro através do $_GET. Pela linha de comando $_GET não consegue pegar parâmetros. Desta forma devemos modificar nosso script de forma a receber os parâmetros imputados via linha de comando. A variável interna $argv captura os parâmetros imputados: <?php var_dump($argv); Agora podemos rodar o script e enviar os parâmetros: c: \xampp\htdocs\>php meuscript.php linha Veremos como saída: Array(2) {   [0] => string(16) "meuscript.php"   [1] => string(5) "linha" } Ou seja, os parâmetros são reconhecidos pelo script como uma array de valores. É isso ai!

Calculando distâncias com Geolocalização pelo MySQL

Imagem
Geolocalização está no topo das tecnologias atuais pois junto com os dispositivos móveis vieram também inúmeras oportunidades de aplicativos que utilizam a localização do usuário para uma infinidade de coisas, de dizer se um amigo está por perto a indicar restaurantes ou serviços próximos a onde o usuário está. Sendo assim é imprescindível aprendermos a trabalhar com geolocalização. A Geolocalização é fundamentalmente um serviço fornecido pelo "Front End" ou falando de modo mais geral do lado cliente, pois é o browser ou o aparelho móvel quem disponibiliza esta informação. Apesar disto existem  coisas relacionadas com Geolocalização que sim podem (e devem) ser feitas do lado servidor (Server Side). Se você está criando alguma aplicação relacionada a encontrar locais próximos, por exemplo, caso não esteja usando um web service de terceiros, no mínimo um banco de dados com as coordenadas geográficas de vários locais você provavelmente deverá possuir. Vamos supor que

MySQL - Apagando functions, procedures e triggers com DROP

A dica de hoje é rápida e prática. Como apagar uma Função, uma Procedure ou Trigger no MySQL? Basta dar um DROP nelas. DROP FUNCTION minhafuncao DROP PROCEDURE minhaprocedure DROP TRIGGER minhatrigger

Árvore de características HTML5 - Um ótimo guia de novas propriedades

Imagem
O gráfico abaixo é bem interessante e nos dá uma ideia das novas propriedades do HTML5.

Angular.js - Montando listas ou tabelas usando loops com ng-repeat

Imagem
No artigo anterior vimos como trabalhar com estilos CSS e classes além de conhecer algumas novas diretivas e como elas são uma espécie de atalho para os desenvolvedores . Hoje vamos avançar um pouco mais e trazer um assunto bem útil, que é a criação de listas e tabelas dinamicamente, através de loops. É comum as listas ou tabelas serem criadas do lado servidor, fazendo-se loops dos dados vindos de um banco de dados ou array mas fazer esta mesma ação do lado cliente é menos comum. Como a ideia do Algular.js é trabalhar dados fornecidos no formato Json, devemos ter em mente que criar uma lista ou tabela pode ser feita sim do lado cliente de maneira fácil e, além disto, contribuir para a prática da programação baseada em MVC, ou seja, que separa as camadas de layout das demais. Além disto vamos aproveitar a oportunidade e tratar também de uma outra maneira de aplicar as técnicas de estilos CSS. O exemplo abaixo será nossa base de estudos neste artigo. <html ng-app> &