Novembro 7th, 2016 Por suporte

sql-icon

Muitos programadores costumam executar vários comandos INSERT quando pretendem inserir múltiplos registros em uma tabela de banco de dados. Porém, quando os dados serão salvos na mesma tabela, não é necessário executar diversos comandos INSERT; apenas um é suficiente.

Por exemplo: em vez de executar:

INSERT INTO tabela(numero) VALUES (1);
INSERT INTO tabela(numero) VALUES (2);
...

Poderíamos executar:

INSERT INTO tabela(numero) VALUES (1), (2);

Vou mostrar uma maneira simples de se fazer isso dinamicamente, com quantidade indeterminada informações, que podem vir de qualquer tipo de fonte de dados.

Vamos considerar um array com números inteiros, de 1 a 10:

$valores = range( 1 , 10 );

Para inserir isso num banco de dados, muitos fariam isto:

$valores = range( 1 , 10 );
for ( $i = 0, $total = count( $valores ); $i < $total; $i++ )
{
    $DB->query( 'INSERT INTO tabela(numero) VALUES
(' . $valores[ $i ] . ')' );
}

Isso funciona. Mas é lento e sobrecarrega o servidor. Imaginem um array com 100 mil valores. Seriam executados 100 mil consultas no banco.

Esse problema é conhecido como O Problema do N + 1. Clique aqui e leia mais sobre isso.

Como Gerar Uma Única SQL Para Inserir Múltiplos Registros

O correto é gerar a string SQL com todos os valores a serem inseridos, separados por vírgula, de forma a executar a consulta apenas uma vez.

Logo, podemos fazer isto:

$valores = range( 1 , 10 );
$sql = sprintf( 'INSERT INTO tabela(numero) VALUES (%s)', implode( '), 
(' , $valores ) );
$DB->query( $sql );

Se dermos um echo em $sql, teremos como saída:

INSERT INTO tabela(numero) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)

Dessa forma só se executa a SQL uma vez, tornando a execução bem mais rápida.

Fonte: http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/

Publicado em Infovida Etiquetas: ,

Novembro 7th, 2016 Por suporte

Uma das novidades do SQL Server 2008 em relação às versões anteriores é uma sintaxe alternativa para o comendo INSERT que permite a inserção de múltiplas linhas através da execução de um único comando.

A nova estrutura permite declarar várias linhas entre parênteses, separadas por vírgulas. Veja esta opção de sintaxe:

INSERT INTO tabela (coluna1,coluna2, coluna3)
VALUES (valor1,valor2,valor3),(valor4,valor5,valor6),(valor7,valor8,valor9)

Assim, pode-se substituir scripts como este:

INSERT INTO Contato(nome,email,telefone)
VALUES (‘Evandro’,’evandro@email.com’,’3456-7890′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘Ronaldo’,’contato@ronaldo.com.br’,’8765-5432′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘Mariana’,’mariana@email.com’,’3344-9988′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘José’,’falecom@jose.com’,’5678-1011′)

Por estruturas como esta:

INSERT INTO Contato(nome,email,telefone)
VALUES
(‘Evandro’,’evandro@email.com’,’3456-7890′),
(‘Ronaldo’,’contato@ronaldo.com.br’,’8765-5432′),
(‘Mariana’,’mariana@email.com’,’3344-9988′),
(‘José’,’falecom@jose.com’,’5678-1011′)

Este modelo já vem sendo utilizado nos exemplos deste blog, pois diminui o tamanho dos scripts gerados e também facilita a vida do desenvolvedor SQL.

Fonte: http://www.sqlserverdicas.com/2011/06/inserindo-multiplas-linhas-com-um-unico.html

Publicado em Tutos e Dicas Etiquetas: ,

Outubro 26th, 2016 Por suporte

Você pode trabalhar com timestamp

$start = strtotime( date('Y-m-d' . '08:25:00') );
$end = strtotime( date('Y-m-d' . '12:25:00') );
$now = time();

if ( $start <= $now && $now <= $end ) {
    echo 'Está entre o intervalo';
}

Ou trabalhar com DateTime

$start = new DateTime('04:00:00');
$end = new DateTime('06:30:00');
$now = new DateTime('now');

if ( $start <= $now && $now <= $end ) {
    echo 'Está entre o intervalo';
}

Fonte: http://pt.stackoverflow.com/questions/98404/como-verificar-se-minha-hora-atual-est%C3%A1-em-um-intervalo-de-hora

Publicado em Tutos e Dicas Etiquetas: , ,

Outubro 24th, 2016 Por suporte
Prezado leitor. Se você tivesse nascido ontem, obviamente hoje você teria um dia de idade. Agora responda rápido, e em SQL: qual o número de dias vividos por você até hoje?

Aprenderemos neste artigo a trabalhar com funções de data no SQL Server. As principais são: GETDATE, DATEPART, DATEADD e DATEDIFF.

Um detalhe importante é que as funções de data trabalham referenciando unidades de data. As mais comuns são:

  • year(ano);
  • month(mês);
  • day(dia);

Observações:

1) O Books OnLine do SQL Server apresenta a lista completa desses parâmetros de valores (unidades), bem como outras funções de data;

2)As configurações de data para esse artigo estão no formato americano. Logo, a data 02/01/2004 deve ser lida como primeiro de fevereiro de 2004.

GETDATE ( )

A função GETDATE retorna a data e a hora atuais do sistema. Podemos, no Query Analyzer, digitar o seguinte comando para obter a data e hora atuais:

SELECT GETDATE ( )

DATEPART (unidade, data)

A função DATEPART retorna a parte especificada de uma data como um inteiro. Observe os exemplos:

SELECT DATEPART ( YEAR , '02/01/2004' )

Reposta: 2004

SELECT DATEPART ( MONTH , '02/01/2004' )

Reposta: 2

SELECT DATEPART ( DAY , '02/01/2004' )

Reposta: 1

DATEADD (unidade, numero_unid, data)

A função DATEADD retorna uma nova data através da soma do número de unidades especificadas pelo valor unidade a uma data. Observe os exemplos:

SELECT DATEADD ( DAY ,6, '02/01/2004' )

Reposta: 2004-02-07

SELECT DATEADD ( MONTH ,6, '02/01/2004' )

Reposta: 2004-08-01

SELECT DATEADD ( YEAR ,6, '02/01/2004' )

Reposta: 2010-02-01

DATEDIFF (unidade, data1, data2)

A função DATEDIFF calcula a diferença entre as datas data2 e data1, retornando o resultado como um inteiro, cuja unidade é definida pelo valor unidade. Observe os exemplos:

SELECT DATEDIFF ( DAY , '02/01/2004' , '05/25/2004' )

Reposta: 114 (dias)

SELECT DATEDIFF ( MONTH , '02/01/2004' , '05/25/2004' )

Reposta: 3 (meses)

SELECT DATEDIFF ( YEAR , '02/01/2004' , '05/25/2006' )

Reposta: 2 (anos)

Dessa forma, a expressão SQL que retorna o número de dias vivido por você até hoje é:

SELECT DATEDIFF(DAY, suadata, GETDATE())

suadata deve ser substituída pela sua data de nascimento.

Outro exemplo interessante é mostrado através do código T-SQL abaixo. Usando funções de data, exibimos, para cada cliente, a idade em dias, meses e em anos (idade do cliente na data atual e em 31 de dezembro).

Observe a lógica utilizada no comando CASE. Neste caso, é testado se o cliente já fez aniversário, comparando o mês em que ele nasceu com o mês corrente e comparando o dia em que ele nasceu com o dia corrente. Se essa comparação for verdadeira, basta diminuir o ano atual do ano de nascimento do cliente. Caso contrário (o cliente ainda não fez aniversário), temos que diminuir 1 do valor anterior.

SELECT NOME, NASCIMENTO,<BR><BR>  DATEDIFF(DAY,NASCIMENTO,GETDATE())AS DIASVIVIDOS,<BR><BR>  DATEDIFF(MONTH,NASCIMENTO,GETDATE()) AS MESESVIVIDOS,<BR><BR>  CASE WHEN<BR><BR>     DATEPART(MONTH,NASCIMENTO)<= DATEPART(MONTH,GETDATE()) AND <BR><BR>     DATEPART(DAY,NASCIMENTO)<= DATEPART(DAY,GETDATE()) <BR><BR>  THEN<BR><BR>        (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))<BR><BR>  ELSE<BR><BR>       (DATEDIFF(YEAR,NASCIMENTO,GETDATE()))- 1<BR><BR>       END AS IDADEATUAL,<BR><BR>  DATEDIFF(YEAR,NASCIMENTO,GETDATE())AS IDADE3112<BR><BR>FROM CLIENTE

26-05pic.JPGVimos, neste artigo, exemplos do uso de funções de data no SQL Server. Outros SGBDs implementam funções de data, provavelmente com sintaxe diferente. Consulte a documentação do SGBD que você utiliza, para obter maiores detalhes.

Baixe aqui o script utilizado nesse artigo.

Veja mais conteúdo de banco de dados

Referências:

•  Books OnLine do SQL Server

•  SQL Server 7: Transact-SQL – Guia de Consulta Rápida: Novatec Editora

Fonte: http://www.devmedia.com.br/funcoes-de-data-no-sql-server/1946

Publicado em Tutos e Dicas Etiquetas: , , ,

Outubro 19th, 2016 Por suporte

Com a função empty() do PHP se consegue saber se uma determinada variável é vazia (não tem valor algum). Ela é bastante útil para o tratamento de informações na página.

Por exemplo, você quer checar se determinado campo de um formulário foi preenchido (ou simplesmente para tratar a mensagem que será exibida ao usuário caso a variável seja vazia). Você poderia checar isto da seguinte forma (suponhamos que ele esteja sendo enviado pelo FORM pelo método POST):

<?
$nome_da_variavel = $_POST["nome_da_variavel"];

if(empty($nome_da_variavel)) {
	echo "Variável nula.";
}
else {
	echo "Variável não-nula.";
}
?>

Se a variável nome_da_variavel for vazia, será exibido a mensagem “Variável nula.”. Caso contrário, será exibido a mensagem “Variável não-nula.”.

Para maiores informações sobre a função empty() acesse:

http://www.php.net/empty

Fonte: http://www.htmlstaff.org/ver.php?id=2144

Publicado em Tutos e Dicas Etiquetas: ,