Pesquisar dados dentro de um campo tipo text e migrar de uma tabela para outra usando insert, update com subselect

MySQL, SQL View Comments Marcelo Korjenioski

Cria as tabelas.


create table
tb_comentario (
pk_comentario int not null auto_increment primary key,
tx_comentario text
)

create table
tb_data_comentario (
pk_data_comentario int not null auto_increment primary key,
dt_comentario date
)

Faz o insert dos dados para teste.


insert  into tb_comentario (tx_comentario)
values
('Tutorial de procura e migração de dados no MySql DATA=20090515 (YYYYMMDD)'),
('Tutorial de procura e migração de dados no MySql DATA=20090516 (YYYYMMDD)'),
('Tutorial de procura e migração de dados no MySql DATA=20090517 (YYYYMMDD)')

Veri­fica se tabela rece­beu os dados do insert.

select * from tb_comentario
WHERE tx_comentario is not null

Pes­qui­sar dados den­tro de um campo tipo text para pegar somente a data.


SELECT DATE(CONCAT(SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +5,4) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +9,2) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +11,2)))
FROM tb_comentario
WHERE  tx_comentario is not null

Faz o Insert dos dados da tabela tb_comentario para tb_data_comentario.


INSERT INTO tb_data_comentario (pk_data_comentario,dt_comentario)
SELECT
pk_comentario ,
DATE(CONCAT(SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +5,4) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +9,2) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +11,2))) as date
FROM tb_comentario
WHERE  tx_comentario is not null

Faz o Update dos dados da tabela tb_comentario.

UPDATE tb_data_comentario
SET
dt_comentario = (SELECT DATE(CONCAT(SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +5,4) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +9,2) , "-" , SUBSTRING(tx_comentario,INSTR(tx_comentario, 'DATA=') +11,2))) + INTERVAL 3 DAY as date
FROM tb_comentario
WHERE tx_comentario is not null and pk_data_comentario = pk_comentario )

Veri­fica se os dados foram atualizados.

select * from tb_data_comentario

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Criar SP (Stored Procedure) no MySql

MySQL, SQL View Comments Marcelo Korjenioski

Exe­cute o codigo para criar a tabela tb_saldo.

CREATE TABLE tb_saldo (
fk_cliente int auto_increment primary key,
nome varchar(60) not null,
cpf varchar(20) not null unique,
saldo decimal(10,2),
dt_cadastro timestamp default current_timestamp
) Engine =InnoDB;

O código abaixo veri­fica se já existe uma pro­ce­dure com o mesmo nome. Caso exista ele deleta a pro­ce­dure e logo depois ele cria a sp_criar_usuario novamente.

GO
DROP PROCEDURE IF EXISTS sp_criar_usuario;
GO
create procedure sp_criar_usuario(v_nome varchar(60), v_cpf char(20), v_valor decimal(10,2))
BEGIN
IF ( (v_nome != '') AND (v_cpf != '') AND (v_valor >= 0) AND ((select count(cpf) from tb_saldo where cpf = v_cpf) = 0)) THEN
INSERT INTO tb_saldo (nome,cpf,saldo)
VALUES (v_nome, v_cpf,v_valor);
ELSE
SELECT 'Erro ao cadastrar!' AS Msg;
END IF;
END;

Crio a sto­red pro­ce­dure sp_credito para adi­ci­o­nar credito.

GO
DROP PROCEDURE IF EXISTS sp_credito;
GO
CREATE PROCEDURE sp_credito(v_cpf CHAR(20), v_valor DECIMAL(10,2))
BEGIN
IF (SELECT count(cpf) FROM tb_saldo WHERE cpf = v_cpf) THEN
UPDATE tb_saldo SET saldo = saldo + v_valor WHERE cpf = v_cpf;
ELSE
SELECT 'CPF não encontrado!' AS Msg;
END IF;
END;

Crio a sto­red pro­ce­dure sp_transferencia para trans­fe­rir cre­dito entre usuários.

GO
DROP PROCEDURE IF EXISTS sp_transferencia;
GO
CREATE PROCEDURE sp_transferencia(v_origem VARCHAR(20), v_destino VARCHAR(20), v_valor DECIMAL(10,2))
BEGIN
if ((select count(cpf) FROM tb_saldo WHERE cpf = v_origem AND saldo >= v_valor) > 0 AND (SELECT count(cpf) FROM tb_saldo WHERE cpf = v_destino) > 0 ) THEN
UPDATE tb_saldo SET saldo = saldo - v_valor WHERE cpf = v_origem;
UPDATE tb_saldo SET saldo = saldo + v_valor WHERE cpf = v_destino;
ELSE
SELECT 'Erro!' AS Msg;
END IF;
END;

Crio a sto­red pro­ce­dure sp_pks_clientes para retor­nar todas pk_cliente com o valor igual ou supe­rior ao infor­mado no argu­mento. O retorno é uma string sepa­randa por vir­gula.
A fun­ção group_concat ira con­ca­te­nar os regis­tros de fk_cliente para o retorno.

GO
DROP PROCEDURE IF EXISTS sp_pks_clientes;
GO
CREATE PROCEDURE sp_pks_clientes(v_valor DECIMAL(10,2))
BEGIN
DECLARE v_pks_clientes varchar(200);
SET v_pks_clientes = (SELECT group_concat(fk_cliente) AS codigos FROM tb_saldo  WHERE  saldo >= v_valor);
SELECT v_pks_clientes;
END;

Para cha­mar uma pro­ce­dure é neces­sá­rio usar “call sp_nome(argumentos);”.

Crio o usuá­rio Maria.

call sp_criar_usuario('Maria','03984582901','50');

Crio o usuá­rio João.

call sp_criar_usuario('João','12345678910','0');

Adi­ci­ono o valor para Maria

call sp_credito('03984582901',40);

Faço a transferencia

call sp_transferencia('03984582901','12345678910',40);

Veri­fico retorno de todas as pk_cliente em uma string com o valor igual ou supe­rior ao infor­mado na sp_usuarios.

call sp_usuarios(20);

Veri­fico se os valo­res estão corretos

select * from tb_saldo

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Adicionar data atual e somar 1 ano. MySQL

MySQL, SQL View Comments Marcelo Korjenioski

Para fazer a soma a par­tir da data atual use

// Pega a data atual
CURDATE()
//Dia
ADDDATE( CURDATE(), INTERVAL 1 DAY)
//Mês
ADDDATE( CURDATE(), INTERVAL 1 MONTH)
//Ano
ADDDATE( CURDATE(), INTERVAL 1 YEAR)

Exem­plo:

INSERT INTO
tabela_validade (valor, data_registro, data_validade)
VALUES(' 3.33 ', CURDATE(), ADDDATE( CURDATE(), INTERVAL 1 YEAR))

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Importar arquivo XML usando PHP e inserindo em BD MySQL.

MySQL, PHP, SQL, XML View Comments Marcelo Korjenioski

Crie um arquivo cha­mado produtos.xml e insira o código abaixo.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalogo>
<produto id='p1'>
<nome>Caderno</nome>
<preco>2,00</preco>
<quantidade>100</quantidade>
</produto>
<produto id='p2'>
<nome>Caneta</nome>
<preco>1,00</preco>
<quantidade>200</quantidade>
</produto>
<produto id='p3'>
<nome>Lapis</nome>
<preco>0,50</preco>
<quantidade>50</quantidade>
</produto>
<produto id='p4'>
<nome>Livro Matematica</nome>
<preco>11,00</preco>
<quantidade>10</quantidade>
</produto>
<produto id='p5'>
<nome>Apontador</nome>
<preco>1,00</preco>
<quantidade>20</quantidade>
</produto>
</catalogo>

Crie um arquivo cha­mado inporta.php e insira o código abaixo.

<?php
// Fazendo a conexão com o servidor MySQL

//Caso queira apenas criar o arquivo XML e gerar uma query sem inserir no banco
// mude valor de $ativar_conexao para false.
$ativar_conexao = true;

if ($ativar_conexao == true) {
$conexao = mysql_pconnect("localhost","root","") or die('falha ao conectar');
$query = 'CREATE DATABASE loja';

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
}

mysql_select_db("test",$conexao) or die($msg[1]);

$query = "CREATE TABLE produtos (
codigo     varchar(10),
nome       varchar(255),
preco      varchar(50),
quantidade varchar(50)";

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
}
}
// Fim comentario

$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
$items = $doc->getElementsByTagName('produto');
$campos = array('nome','preco','quantidade');
$query = NULL;
$query .= "insert into produtos (codigo,nome,preco,quantidade) values ";
for ($i=0; $i < $items->length; $i++) {
$value = NULL;
$value .= " (";
$codigo = $items->item($i)->getAttribute('id');
$value .= "'$codigo',";
echo $items->item($i)->getAttribute('id') , '<br />';
// Busca por elementos definidos no array
$valor = array();
foreach ($campos as $campo) {
$valor[] = "'" . $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue . "'";
echo $items->item($i)->getElementsByTagName($campo)->item(0)->tagName , ': ';
echo $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue , '<br />';

}
$value .= implode(',', $valor);
$value .= ') ';
$values[] = $value;

echo '<hr>';
}
$query .= implode(',', $values);

echo $query;

// Comente caso apenas queira gerar o codigo xml
if ($ativar_conexao == true) {
if(!mysql_query($query,$conexao)) {
echo 'falha ao inserir dados<br />';
}
}

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.