Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tiagocaus

While com duas tabelas

Recommended Posts

Boa noite.

Tenho duas tabelas



- financ_receita (Valores positivos de entrada)

- financ_despesa (Valores negativos de saída)




<?php
mysql_select_db($database_conexao, $conexao);
$query_rsAnoAtualEntrada = "SELECT ID_FinanE, SUM(valor) AS SomaEntradaAtual, data FROM financ_receita WHERE YEAR(data) = ".date("Y")." GROUP BY MONTH(data)";
$rsAnoAtualEntrada = mysql_query($query_rsAnoAtualEntrada, $conexao) or die(mysql_error());
$row_rsAnoAtualEntrada = mysql_fetch_assoc($rsAnoAtualEntrada);
$totalRows_rsAnoAtualEntrada = mysql_num_rows($rsAnoAtualEntrada);
?>
<?php
mysql_select_db($database_conexao, $conexao);
$query_rsAnoAtualSaida = "SELECT ID_FinanS, SUM(valor) AS SomaSaidaAtual, data FROM financ_despesa WHERE YEAR(data) = ".date("Y")." GROUP BY MONTH(data)";
$rsAnoAtualSaida = mysql_query($query_rsAnoAtualSaida, $conexao) or die(mysql_error());
$row_rsAnoAtualSaida = mysql_fetch_assoc($rsAnoAtualSaida);
$totalRows_rsAnoAtualSaida = mysql_num_rows($rsAnoAtualSaida);
?>




Estou fazendo o while.





<?php do { ?>
<?php } while ($row_rsAnoAtualEntrada = mysql_fetch_assoc($rsAnoAtualEntrada)); ?>






Estou fazendo o select de todos os resultado do ano e agrupando pelos meses. Então se tiver vários valores do mesmo mês e ano, soma e mostra o valor da entrada. Até ai OK.


Agora preciso mostrar também no mesmo while os valores de saída, pois acontece de mesmo mês não ter nenhum valor de entrada, mas já existir o de saída, como lançamento programado.



É possível fazer?



Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia GCAS, seque minha tabela, deixei os mesmo valores de teste que estou usando.

 


CREATE TABLE IF NOT EXISTS `financ_despesa` (
  `ID_FinanS` int(255) NOT NULL AUTO_INCREMENT,
  `id_fornec` int(255) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `planoDeConta` varchar(20) NOT NULL COMMENT 'Plano de conta',
  `valor` varchar(20) NOT NULL,
  `data` date NOT NULL,
  `transao` varchar(2) NOT NULL COMMENT '[SN] Saida Normal [TR]Transferencia',
  `numDocumento` varchar(100) DEFAULT NULL COMMENT 'Numero do documento caso exista.',
  `hora` varchar(8) DEFAULT NULL COMMENT 'Hora da transacao',
  `contaDeDebito` varchar(5) NOT NULL COMMENT 'Conta a qual esta saindo o dinheiro.',
  `formaPagamento` varchar(5) NOT NULL COMMENT 'Forma que esta sendo feito o pagamento. Dinheiro, Cartão, ...',
  `obs` varchar(255) DEFAULT NULL,
  `cheqBomPara` varchar(10) DEFAULT NULL COMMENT 'Data Prevista para compensar/debitar/sacar.',
  `cheqBanco` varchar(5) DEFAULT NULL,
  `cheqAgencia` varchar(20) DEFAULT NULL,
  `cheqNumero` int(20) DEFAULT NULL,
  PRIMARY KEY (`ID_FinanS`)
);

INSERT INTO `financ_despesa` (`ID_FinanS`, `id_fornec`, `nome`, `planoDeConta`, `valor`, `data`, `transao`, `numDocumento`, `hora`, `contaDeDebito`, `formaPagamento`, `obs`, `cheqBomPara`, `cheqBanco`, `cheqAgencia`, `cheqNumero`) VALUES
(1, 1, 'Teste', '', '777.77', '2013-07-07', 'SN', NULL, '22:48:00', '1', '1', NULL, NULL, NULL, NULL, NULL);



CREATE TABLE IF NOT EXISTS `financ_receita` (
  `ID_FinanE` int(255) NOT NULL AUTO_INCREMENT,
  `id_cadastro` int(255) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `planoDeConta` varchar(20) NOT NULL COMMENT 'Plano de Conta',
  `valor` varchar(20) NOT NULL,
  `data` date NOT NULL,
  `envelope` varchar(50) DEFAULT NULL COMMENT 'Nr. de envelope caso exista.',
  `contaBancaria` int(5) NOT NULL COMMENT 'Conta bancária que ira receber o valor.',
  `formaEntrada` int(5) NOT NULL COMMENT 'Dinheiro, Cheque, Cartão, ...',
  `obs` varchar(255) DEFAULT NULL,
  `cheqNomeProprietario` varchar(255) DEFAULT NULL,
  `cheqBanco` varchar(5) DEFAULT NULL,
  `cheqAgencia` varchar(20) DEFAULT NULL,
  `cheqConta` varchar(20) DEFAULT NULL,
  `cheqNumero` varchar(20) DEFAULT NULL,
  `cheqDataDeposito` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`ID_FinanE`)
);


INSERT INTO `financ_receita` (`ID_FinanE`, `id_cadastro`, `nome`, `planoDeConta`, `valor`, `data`, `envelope`, `contaBancaria`, `formaEntrada`, `obs`, `cheqNomeProprietario`, `cheqBanco`, `cheqAgencia`, `cheqConta`, `cheqNumero`, `cheqDataDeposito`) VALUES
(1, 1, 'Tiago', '3.1.01', '300.00', '2013-12-02', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(2, 2, 'Membro de teste 1', '3.1.01', '250.00', '2012-10-07', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(3, 3, 'Membro de teste 2', '3.1.01', '700.00', '2013-12-02', NULL, 1, 2, 'Depositar somente na data', 'Fulano de teste', '18', '5545', '3215-5', '122211122', '2013-12-17'),
(4, 1, 'Tiago', '3.1.01', '125.70', '2012-12-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(5, 0, 'Visitante', '3.1.01', '55.00', '2013-10-02', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(6, 1, 'Tiago Pereira Caus', '3.1.01', '300.00', '2012-12-02', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(7, 2, 'Membro de teste 1', '3.1.01', '250.00', '2012-10-07', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(8, 3, 'Membro de teste 2', '3.1.01', '700.00', '2013-12-02', NULL, 1, 2, 'Depositar somente na data', 'Fulano de teste', '18', '5545', '3215-5', '122211122', '2011-12-17'),
(9, 1, 'Tiago', '3.1.01', '125.70', '2013-12-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(10, 1, 'Tiago', '3.1.01', '125.70', '2011-12-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(11, 1, 'Tiago', '3.1.01', '125.70', '2012-12-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(12, 1, 'Tiago', '3.1.01', '125.70', '2012-08-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(13, 1, 'Tiago', '3.1.01', '125.70', '2012-01-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(14, 1, 'Tiago', '3.1.01', '125.70', '2012-02-01', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(15, 0, 'Visitante', '3.1.01', '55.00', '2011-10-02', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá tiago, tá na mão

 

(select `nome` as nome_d, `valor` * -1 as valor_d, `planoDeConta` as planoDeConta_d, `data` as data_d 
from financ_despesa)

union

(select nome, valor as valor_d, planoDeConta, `data`
from financ_receita)

Seguinte, deixa dar uma explanada: o que foi feito foi uma union, os valores das duas tabelas foram colocadas nelas. O que foi feito para diferenciar? se vc reparar, na primeira query, na coluna valor, foi usado um multiplicador "*-1"(que sinaliza despesas), já ai é apenas utilizar seu metodo de agrupamento que vc vem utilzando.

 

Espero ter ajudado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigão, você ajudou e muito. Agora estou em outra fria.

 

Estou fazendo uma busca nas duas tabelas:

 

(SELECT nome, data, valor FROM `financ_receita` WHERE data BETWEEN ('2012-12-01') AND ('2013-12-23'))
	UNION ALL
(SELECT nome, data, valor FROM `financ_despesa` WHERE data BETWEEN ('2012-12-01') AND ('2013-12-23')) ORDER BY data ASC

 

 

É possível no valor da despesa aparecer com o sinal de - na frente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tiago, use do jeito qu te passei, pois, como mostrado acima, já está com um multiplicador (-1) que já sinaliza se tem debito.

 

Vi que vc deu uma alterada na query, sem problemas, apenas mantenha, na tabela despesa, o multiplicador -1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.