terça-feira, 4 de outubro de 2011

Update no MySQL com Join


Algo muito útil que até então não tinha utilizado. Digamos que precise atualizar uma coluna no MySQL, porém a condição para tal, seja um valor específico em outra tabela.

Para não fazer uma query dentro de outra para trazer o resultado e compará-lo no no WHERE da primeira, fiz da seguinte forma:

O CÓDIGO

UPDATE 
tabela1, tabela2 
SET
tabela1.campo_para_atualizar = 'novo valor'
WHERE
tabela1.id = tabela2.fk_id_tabela1 AND
tabela2.campo_a_ser_testado = 'valor a ser testado'

A EXPLICAÇÃO:

Será atualizado todos os registros da tabela1 em que, o registro da tabela2 ue possuir a foreign key para tabela1, contiver no campo campo_a_ser_testado o valor 'valor a ser testado'.


hasta!

sexta-feira, 23 de setembro de 2011

Como o MySQL pode facilitar a sua vida

Como o MySQL pode facilitar a sua vida 

A função IN e NOT IN

Usamos IN para fazer consultas quando precisamos que seja retornado todos os registros onde em um determinado campos contenha um dos valores que serão passados no IN.

Usamos NOT IN quando queremos retornar tudo menos os resultados passados no NOT IN

Uso em String:

SELECT sigla, nome, população
FROM cidades
WHERE
Sigla IN(‘PR’, ‘SP’, ‘MG’);
//NOT IN
Sigla NOT IN(‘PR’, ‘SP’, ‘MG’);

Uso numérico:

SELECT nome, email, idade
FROM curriculos
WHERE
idade IN (18, 19, 20)
//NOT IN
idade NOT IN (15, 16, 17)


As funções IF e CASE WHEN

Usamos a função IF no MySQL com a mesma finalidade do que qualquer linguagem de programação, só que na maioria das vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:

IF(condição, caso verdadeiro, caso contrário)

SELECT nome, email, IF(sexo =”M”, “Masculino”, “Feminino”)
FROM currículos


A função CASE WHEN:

Usamos a função CASE WHEN no MySQL com a mesma finalidade do que usamos em qualquer çinguagem de programação, so que na maioria da vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:
CASE campo
WHEN “valor1” THEN “Novo valor”

Controle de fluxo

SELECT nome, setor
CASE mes_nascimento
WHEN 01 THEN “Janeiro”
WHEN 02 THEN “Fevereiro”
WHEN 03 THEN “Março”
WHEN 04 THEN “Abril”
WHEN 05 THEN “Maio”
WHEN 06 THEN “Junho”
WHEN 07 THEN “Julho”
WHEN 08 THEN “Agosto”
WHEN 09 THEN “Setembro”
WHEN 10 THEN “Outubro”
WHEN 11 THEN “Novembro”
ELSE “Dezembro” END AS mes_nascimento
FROM funcionários

Condições livres

SELECT
CASE
WHEN continente = “América” THEN “Continente americano”
WHEN pais = “Brasil” THEN “Continente sul americano”
WHEN continente = “Mexico” THEN “Continente norte americano”
WHEN estado = “Paraná” THEN “Região Sul”
WHEN estado = “São Paulo” THEN “Região Sudeste”


Funções matemáticas

Trigonometria
pi() = 3.14.15.93
radians(180) = 3.1415926535898
sin(radians(60)) = 0.866025
sqrt(3)/2 = 0.86602540
degrees(asin(sqrt(3)/2)) = 60

Logarítimo e potência

log(2) = 0.693147
exp(1) = 2.718282
power(2,5) = 32.000000
log10(100) = 2.000000
mod(13,7) = 6
13%7 = 6
abs(-42) = 42
sign(0) = 0

Arredondamento

ceiling(2.5) = 3
floor(2.5) = 2
round(2.5) = 2
round(2.51) = 3
truncate(2.5,0) = 2

celing para cima
floor para baixo
round para o inteiro mais próximo
truncate elimina casas decimais

Obs: todas as funções de arredondamento também funcionam para números negativos

Funções de string

concat – concatema strings; pode receber 1-n parâmetros
substring – pega partes de uma string baseado na posição
substring_index – pega partes da string baseado nos delimitadores
instr – encontra strings em outras strigns
replace – modifica strings em outras strings
length – calcula o tamanho da string
like – compara strings utilizando wildcards


substring_index(“teste@teste.com”, “@”, 1) = teste
substring_index(“orders.mysql.com”, “.”, -2) = mysql.com
reverse(“orders.mysql.com”) = moc.lqsym.sredro
upper(“mysql”) = MYSQL
lower(“MySQL”) = mysql
rpad(“Teste”, 10, “.”) = teste…..
char(77,121,83,81,76) = MySQL
left(“Teste”, 3) = Tes
mid(“Teste Testee Testee Testesssss”, 13,6) = Testee
rught(‘Teste Testee“, 6) = Testeee
trim(“Q”, from “QQQQMySQL ABQQQ”) = MySQL AB

Funções de tempo e de data

NOW() e intervalos

SELECT NOW() – irá retornar a data e hora atual do servidor MySQL no formato
aaaa-mm-dd hh:mm:ss


SELECT NOW() + INTERVAL 2DAY – irá retornar a data e hoira do servidor, só que com uma diferença de 2 dias para frente(ex: hoje é 2006-10-07 ele irá retornar 2006-10-09), essa diferença pode ser negativa também, e o intervalo pode ser horas, minutos, segundos, dias, semanas, meses, anos, etc;


Formatando datas com o DATE_FORMAT()

Sintaxe:
DATE_FORMAT(campo, ‘formato desejado’)


Especificador Descrição
%M Nome do mês (January..December)
%W Nome do dia da semana (Sunday..Saturday)
%D Dia do mês com o sufixo em Inglês (1st, 2nd, 3rd, etc.)
%Y Ano, numérico, com 4 dígitos
%y Ano, numérico, com 2 dígitos
%a Nome do dia da semana abreviado (Sun..Sat)
%d Dia do mês, numérico (00..31)
%e Dia do mês, numérico (0..31)
%m Mês, numérico (01..12)
%c Mês, numérico (1..12)
%b Nome do mês, abreviado (Jan..Dec)
%j Dia do ano (001..366)
%H Hora (00..23)
%k Hora (0..23)
%h Hora (01..12)
%I Hora (01..12)
%l Hora (1..12)
%i Minutos, numérico (00..59)
%r Horário, 12 horas (hh:mm:ss [AP]M)
%T Horário, 24 horas (hh:mm:ss)
%S Segundos (00..59)
%s Segundos (00..59)
%p AM ou PM
%w Dia da semana (0=Domingo..6=Sábado)
%U Semana (00..53), onde Domingo é o primeiro dia da semana
%u Semana (00..53), onde Segunda é o primeiro dia da semana
%% Caractere `%'.


Exemplos de uso:

Lembrando sempre que o MySQL armazena as datas no formato aaaa-mm-dd

Para selecionar a data no formato que usamos, ou de nossa necessidade:

SELECT nome, DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) AS data
FROM funcionarios


Esse exemplo agora é muio útil, eu sempre uso quando eu tenho um formulário que tem um campo de data e essa data temque ser pesquisada no MySQL, com ela eu evito de ficar transformando a data de dd/mm/aaaa para aaaa-mm-dd

SELECT nome, departamento
FROM funcionários
WHERE
DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) = ‘22/11/1986’
Função DATEDIFF

Ela calcula a diferença em dias entre duas datas

SELECT DATEDIFF('2006-12-31', '2006-01-01') = 364
 

Fonte: http://www.mysql.org/doc/refman/5.0/en/index.html
Backup com Dump/Restore
para dump:
$ mysqldump -h HOST -u USUARIO -p DATABASE > ARQUIVO.sql
mysql -h HOST -u USUARIO -p DATABASE < ARQUIVO.sql
mysql -default-character-set=utf8 -h HOST -u USUARIO -p DATABASE < ARQUIVO.sql

 

terça-feira, 9 de agosto de 2011

URL Request AS3

O CÓDIGO:

var link:URLRequest = new URLRequest("http://www.google.com.br");

O USO:

navigateToURL(link);

hasta!

quinta-feira, 28 de julho de 2011

Expressão regular para pegar links de posts do twitter (shorts url)

O Código:

http://[\/\w._\-\z%?=&~]*

hasta!

quarta-feira, 6 de julho de 2011

Validação de CPF e CNPJ

$.fn.isCPF = function(){

var cpf = $(this).val().replace(/\./g,'').replace(/\-/g,'');
var rrValida = new Array(
00000000000, 11111111111, 22222222222, 33333333333, 44444444444, 55555555555, 66666666666, 77777777777, 88888888888, 99999999999
);
for(i=0;i<11;i++){
if(cpf == rrValida[i]){
return false;
}
}
    var i;
    var c = cpf.substr(0,9);
    var dv = cpf.substr(9,2);
    var d1 = 0;  
    for (i = 0; i < 9; i++) d1 += c.charAt(i)*(10-i);
    if (d1 == 0) return false;
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(0) != d1) return false;
    d1 *= 2;
    for (i = 0; i < 9; i++) d1 += c.charAt(i)*(11-i);
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(1) != d1)  return false;
    return true;
}



$.fn.isCNPJ = function() {
var cnpj = $(this).val().replace(/\./g,'').replace(/\-/g,'');
var i;
var c = cnpj.substr(0,12);
var dv = cnpj.substr(12,2);
var d1 = 0;
for (i = 0; i < 12; i++) d1 += c.charAt(11-i)*(2+(i % 8));
if (d1 == 0) return false;
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(0) != d1)  return false;
d1 *= 2;
for (i = 0; i < 12; i++) d1 += c.charAt(11-i)*(2+((i+1) % 8));
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(1) != d1)  return false;
return true;
}

segunda-feira, 13 de junho de 2011

Particionando arquivos grandes no linux em partes de tamanho fixo

Um problema que enfrento pela segunda vez, precisava mudar um arquivo gigante de um lugar para outro e o unica forma de conexão era via web.

Para tal usei:

$ split -b TAMANHO_EM_BYTES ARQUIVO_GIGANTE PREFIXO_ARQUIVO
Ex:

$ split -b 94371840 media2.tar.gz media_


E para juntar depois de feito o download:


$ cat PREFIXO_ARQUIVO* ARQUIVO_GIGANTE


hasta!

sexta-feira, 6 de maio de 2011

Brincando com datas no MySQL

Como fazer para subtrair 20min de uma data no mysql?

SELECT NOW() - INTERVAL 20 MINUTE, NOW()


Trocando o sinal também pode ser feito adição, e caso precise pode-se usar outras unidades, tais como

DAY
MONTH
YEAR
HOUR
MINUTE
SECOND

hasta!

segunda-feira, 14 de fevereiro de 2011

Expressão Regular para URLs

O CÓDIGO:

(http|ftp|https)?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?



hasta!

sexta-feira, 21 de janeiro de 2011

Redirecionamento automático com .htaccess

Mudou o site? Os buscadores (Google) já tinham indexado link internos do seu site? Para mandar todo mundo de acesso externo para a raiz do site novo, basta criar um arquivo .htaccess com o seguinte conteúdo:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://SEU_LINK_AQUI/ [R=301,L]

E subir o arquivo no public_html.

Lembrando que o .htaccess funciona para hospedagens Linux.

hasta!