Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Carregar valor do primeiro registro


grego

Pergunta

Olá pessoal !

Me deparei com um problema. Na tabela onde guardo os lançamentos do caixa, preciso a cada registro gravar o saldo e para isso, antes de gravar, pegar o saldo do ultimo registro.

Colocando a clausula DESC no SELECT resolve. Porém ......

Como definir o WHILE para ler só o primeiro registro, carregar o valor do saldo e sair do WHILE ?

Agradeço que puder dar uma dica.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

se você quer pegar apenas 1 registro, ou seja, o 1º registro do BD, você nem rpecisa colocar while, ex:

......

while($i=mysql_fetch_assoc($dados)){
$saldo = $i["saldo"];
break;
}

poderia ser resumido em

$i = mysql_fetch_assoc($dados);
$saldo = $i["saldo"];

as duas maneiras pegam só o primeiro resultado...

o break; no while quebra o loop while, que seria mais propriamente a sua pergunta.

qlqr coisa fala colega

Link para o comentário
Compartilhar em outros sites

  • 0
Olá pessoal !

Me deparei com um problema. Na tabela onde guardo os lançamentos do caixa, preciso a cada registro gravar o saldo e para isso, antes de gravar, pegar o saldo do ultimo registro.

Colocando a clausula DESC no SELECT resolve. Porém ......

Como definir o WHILE para ler só o primeiro registro, carregar o valor do saldo e sair do WHILE ?

Agradeço que puder dar uma dica.

Cara uma coisa que você pode fazer é usar a função mysql_insert_id que retorna um resource do último insert feito no banco. É uma solução também.

http://www.master.iag.usp.br/manuais/php/b...-insert-id.html

[]'s Rodrigo Nascimento

Link para o comentário
Compartilhar em outros sites

  • 0
Olá pessoal !

Me deparei com um problema. Na tabela onde guardo os lançamentos do caixa, preciso a cada registro gravar o saldo e para isso, antes de gravar, pegar o saldo do ultimo registro.

Colocando a clausula DESC no SELECT resolve. Porém ......

Como definir o WHILE para ler só o primeiro registro, carregar o valor do saldo e sair do WHILE ?

Agradeço que puder dar uma dica.

Bom amigo, não sei se entendi direito o que você quer fazer mas se for o que eu entendi então você nem precisa do php para fazer isso.

Imagina que a tabela `caixa` seja assim:

mysql> desc `caixa`;
+-------+-----------------------+------+-----+-------------------+-----------------------------+
| Field | Type                  | Null | Key | Default           | Extra                       |
+-------+-----------------------+------+-----+-------------------+-----------------------------+
| id    | mediumint(8) unsigned | NO   | PRI | NULL              | auto_increment              |
| saldo | decimal(10,3)         | NO   |     | 0.000             |                             |
| data  | timestamp             | NO   | PRI | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)
Para pegarmos o último saldo é só selecionarmos o último registro inserido:
select c.`saldo` from `caixa` c where date( `data` ) = date( now() ) order by c.`id` DESC LIMIT 1 ;
Isso fará com que o último saldo da data atual seja retornado, com isso basta garantirmos que se não houver nenhum registro na data (ex. a tabela está vazia) nós tenhamos o valor 0 e não null:
select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC LIMIT 1 ),0);
Pronto, agora que conseguimos recuperar o último saldo da data atual então podemos utilizar isso como subquery e utilizar o resultado para gravar no banco:
insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC LIMIT 1 ),0) + 10;
Preste atenção no + 10 no final do insert, esse é o valor do caixa atual, a cada fechamento de caixa você irá somar ao saldo anterior. Testando:
mysql> create table `caixa` ( `id` mediumint(8) unsigned not null auto_increment, `saldo` decimal(10,3) not null default 0, `data` timestamp not null default current_timestamp on update current_timestamp, primary key(`id`,`data`) ) engine=MyISAM;                                                                  
Query OK, 0 rows affected (0.00 sec)                                                                                                                        

mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + 10;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from caixa;
+----+--------+---------------------+
| id | saldo  | data                |
+----+--------+---------------------+
|  1 | 10.000 | 2009-07-17 07:13:11 |
|  2 | 20.000 | 2009-07-17 07:13:13 |
|  3 | 30.000 | 2009-07-17 07:13:14 |
|  4 | 40.000 | 2009-07-17 07:13:15 |
+----+--------+---------------------+
4 rows in set (0.00 sec)
Ai no PHP você só precisará substituir o 10 pelo seu valor:
$saldo = 12.33;
$sql = sprintf( "insert into `caixa`(`saldo`) select ifnull((select c.`saldo` from `caixa` c where date(`data`)=date(now()) order by c.`id` DESC limit 1),0) + %f" , $saldo );

if ( mysql_query( $sql ) ){
    printf( "Saldo gravado com sucesso.\n" );
}

Link para o comentário
Compartilhar em outros sites

  • 0

Agradeço pelas dicas. É uma forma de filtrar um registro usando mais parametros de seleção.

Obrigado.

se você quer pegar apenas 1 registro, ou seja, o 1º registro do BD, você nem rpecisa colocar while, ex:

......

while($i=mysql_fetch_assoc($dados)){
$saldo = $i["saldo"];
break;
}

poderia ser resumido em

$i = mysql_fetch_assoc($dados);
$saldo = $i["saldo"];

as duas maneiras pegam só o primeiro resultado...

o break; no while quebra o loop while, que seria mais propriamente a sua pergunta.

qlqr coisa fala colega

Perfeito. Funcionou legal. Obrigado pela força.

Perfeito. Funcionou legal. Obrigado pela força.

Link para o comentário
Compartilhar em outros sites

  • 0
se você quer pegar apenas 1 registro, ou seja, o 1º registro do BD, você nem rpecisa colocar while, ex:

......

while($i=mysql_fetch_assoc($dados)){
$saldo = $i["saldo"];
break;
}

poderia ser resumido em

$i = mysql_fetch_assoc($dados);
$saldo = $i["saldo"];

as duas maneiras pegam só o primeiro resultado...

o break; no while quebra o loop while, que seria mais propriamente a sua pergunta.

qlqr coisa fala colega

Obrigado, funcionou perfeitamente.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...