Arquivado
Este tópico foi arquivado e está fechado para novas respostas.
Recommended Posts
-
Conteúdo Similar
-
Por Rubens Ferreira de Couto
Prezados Senhores,
pelo codigo abaixo descrito consigo buscar na base de dados o que preciso, porém quando insiro em uma função a mesma consulta SQL, não me retorna os dados da mesma forma que diretamente na página porque a consulta só retorna 1 linha.
==primeiro codigo==
require_once('config/dbconfig.php');
include "functions.php";
$contapd = 1;
$mes = 2;
$ano = 2015;
$tipo = 1;
$data_i = "2020-01-02";
$data_f = "2020-01-18";
$pdo = new Database();
$db = $pdo->dbConnection();
//$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE idconta='$contapd' and mes='$mes_hoje' and ano='$ano_hoje'");
//$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE month(datamov)='$mes_hoje' and year(datamov)='$ano_hoje' and idconta='$contapd'");
$stmt = $db->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS ref, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano,
SUM(IF(tipo = 0, valor, 0)) AS debito,
SUM(IF(tipo = 1, valor, 0)) AS credito,
(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2
WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=
DATE_FORMAT(L2.datamov,'%Y%m') and
idconta = lc_movimento.idconta) AS saldo
FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano
GROUP BY idconta, MONTH(datamov), YEAR(datamov) ORDER BY YEAR(datamov), MONTH(datamov);");
$stmt->bindparam(':contapd', $contapd );
$stmt->bindparam(':mes', $mes );
$stmt->bindparam(':ano', $ano );
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $linha){
?>
<table border="1">
<th>Conta</th>
<th>Ref</th>
<th>Mes</th>
<th>Ano</th>
<th>Saldo Ant.</th>
<th>Debito</th>
<th>Credito</th>
<th>Saldo</th>
<tr>
<td><?php echo $linha['idconta']; ?> </td>
<td><?php echo $linha['ref']; ?> </td>
<td><?php echo $linha['mes']; ?> </td>
<td><?php echo $linha['ano']; ?> </td>
<?php $anterior = $linha['saldo'] + $linha['debito'] - $linha['credito']; ?>
<td><?php echo formata_dinheiro($anterior); ?> </td>
<td><?php echo formata_dinheiro($linha['debito']); ?> </td>
<td><?php echo formata_dinheiro($linha['credito']); ?> </td>
<td><?php echo formata_dinheiro($linha['saldo']); ?> </td>
</tr>
</table>
<?php
}
?>
== desta forma está retornando corretamente ==
Já dentro da função não retorna. Os dados de conexão da função estão corretos porque outras funções já estão retornando os dados.
=========================== função saldo anterior ========================================================
// FUNÇÃO PARA RETORNAR OS SALDO ANTERIOR, ENTRADAS, SAIDAS E SALDO ATUAL DO MÊS E ANO SELECIONADOS
public function dados_saldo($idconta, $mes_hoje, $ano_hoje )
{
try
{
$stmt = $this->conn->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS data, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano, SUM(IF(tipo = 0, valor, 0)) AS debito, SUM(IF(tipo = 1, valor, 0)) AS credito,(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2 WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=DATE_FORMAT(L2.datamov,'%Y%m') and idconta = lc_movimento.idconta) AS saldo FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano GROUP BY idconta, mes, ano ORDER BY ano, mes;");
$stmt->execute(array(
':contapd'=>$idconta,
':mes'=>$mes_hoje,
':ano'=>$ano_hoje));
$result=$stmt->fetch(PDO::FETCH_ASSOC);
return $result['data'];
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
O que está dando errado?
-
Por Felipe Guedes Coutinho
Galera, venho contribuindo com diversas dúvidas, mas hoje quem está com uma dúvida sou eu.
Cenário - Gerar Dados para Relatório de Faturamento.
Objetivo - Obter os valores totais das tabelas de Compra, Venda e Despesa agrupados por mês através de SUM dentro do "periodo" passado pela tela de consulta do relatório.
Problema - Não existe um relacionamento entre as tabelas e eu preciso obter os resultados por 1 (UM) único select pois a cada registro lido com os valores totalizados e agrupados por mês eu movimento para um array onde o resultado do array é movimentado para um Chart do Google que gera um gráfico.
Insumos:
Tabela compra
RESULTADO SEPARADO DA TABELA COMPRA
SELECT sum(vlr_pago),
CASE extract(MONTH from dt_registro_compra)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_compra
WHERE dt_registro_compra between '2019-01-01' and '2019-12-31'
group by mes
order by dt_registro_compra asc
RESULTADO:
Tabela Venda
RESULTADO SEPARADO DA TABELA VENDA
SELECT sum(vlr_vale),
CASE extract(MONTH from dt_registro_venda)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_venda
WHERE dt_registro_venda between '2019-01-01' and '2019-12-31'
group by mes
order by dt_registro_venda asc
RESULTADO:
Tabela Despesa
Sei que devo colocar dt_pagamento is not null
RESULTADO SEPARADO DA TABELA DESPESA
SELECT sum(vlr_pago),
CASE extract(MONTH from dt_pagamento)
WHEN 1 THEN 'Janeiro'
WHEN 2 THEN 'Fevereiro'
WHEN 3 THEN 'Março'
WHEN 4 THEN 'Abril'
WHEN 5 THEN 'Maio'
WHEN 6 THEN 'Junho'
WHEN 7 THEN 'Julho'
WHEN 8 THEN 'Agosto'
WHEN 9 THEN 'Setembro'
WHEN 10 THEN 'Outubro'
WHEN 11 THEN 'Novembro'
WHEN 12 THEN 'Dezembro'
END AS mes
FROM db_pescado_gelo.sqltb_despesa
WHERE dt_pagamento between '2019-01-01' and '2019-12-31'
AND dt_pagamento is not null
group by mes
order by dt_pagamento asc
RESULTADO:
O resultado que eu gostaria é algo parecido com isso:
TABELA DE VENDA TABELA DE COMPRA TABELA DE DESPESA - - R$ 31.272,55 Julho - - Agosto R$ 3.796,53 R$ 20.687,20 Agosto R$ 3.796,53 Agosto
Esse resultado eu "preciso" que seja através do retorno do um único SELECT, se alguém puder me ajudar, ficarei muito agradecido.
Se puderem dar uma forã agradeço @Motta ; @Omar~ ; @Maujor ; @gabrielms
Att.
Felipe Coutinho
-
Por ronimarcos.silva
Olá pessoal, preciso de uma ajuda de vocês. Não tenho muita experiência em SQL, creio que para vocês será fácil. Estou usando o banco de dados Oracle 12C.
Supondo que tenho em meu banco 3 colunas, uma de conta de Débito, onde nesta coluna vai o código da conta de débito, uma de conta de Crédito, onde nesta coluna vai o código da conta de Crédito e uma de valor, que é informado o valor de cada lançamento a débito ou a crédito.
Quando o lançamento for a débito, o valor da conta de crédito é igual a Zero (0) e inverso quando o lançamento for a débito, ou seja, se uma conta está preenchida é porque a outra não tem lançamento. Até aí tudo bém, posso totalizar o valor por cada conta de débito ou de crédito. Mas como faço se eu querer saber o total da conta de débito e o total da conta de crédito?
Veja abaixo um exemplo:
Select E640LCT.CtaDeb, E640LCT.CtaCre, sum(E210MVP.VLRMOV) as total from E210Mvp, E644Les, E640Lct where E644Les.CodEmp = E640Lct.CodEmp and E644Les.NumLct = E640Lct.NumLct and E644Les.CodEmp = E210Mvp.CodEmp and E644Les.CodPro = E210Mvp.CodPro and E644Les.CodDer = E210Mvp.CodDer and E644Les.CodDep = E210Mvp.CodDep and E644Les.DatMov = E210Mvp.DatMov and E644Les.SeqMov = E210Mvp.SeqMov and E210Mvp.CodEmp = 100 and E210Mvp.CodFil = 3 and E640LCT.OriLct = 'EST' and E640LCT.DatLct between '01/07/2019' and '31/07/2019' group by E640LCT.CtaDeb, E640LCT.CtaCre
-
Por Ygor Guedes
Boa tarde meu pessoal. Preciso da ajuda de vocês em uma consulta baseada em Inner Join + Group By. Irei deixar as tabelas e a consulta que eu tenho, para melhor visualização:
Consulta:
SELECT tab_garagens.onibus_ponto, tab_garagens.onibus_prefixo, data FROM pontos INNER JOIN tab_garagens ON pontos.onibus_ponto = tab_garagens.onibus_ponto Tabela pontos:
| onibus_ponto | data |
| 10 | 2019-06-03 12:00:00 |
| 10 | 2019-06-03 12:10:00 |
| 44 | 2019-06-03 12:00:00 |
Tabela tab_garagens:
| onibus_ponto | onibus_prefixo |
| 10 | DE700 |
| 44 | GL030 |
A minha consulta está trazendo a informação mais antiga da data; o que eu preciso é tipo um ORDER BY com data mais recente, onde eu pego a data mais atual do registro agrupado na coluna 'onibus_ponto'.
Eu gostaria que saísse assim:
| onibus_ponto | onibus_prefixo | data |
| 10 | DE700 | 2019-06-03 12:10:00 |
| 44 | GL030 | 2019-06-03 12:00:00 |
Se puderem me ajudar, fico agradecido
-
Por brunoogm
Pessoal tenho uma tabela no php cujo resultado do select vindo do bd vem no seguinte formato:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
26 46 15/05/2019 13:57:25 Dinheiro Pendente Bacon Cheddar 1 60.00
26 46 15/05/2019 13:57:25 Dinheiro Pendente Chicken Club Sandwich 1 45.00
26 46 15/05/2019 13:57:25 Dinheiro Pendente Philly Cheese Steak 1 50.00
26 46 15/05/2019 13:57:25 Dinheiro Pendente Smoke House 1 55.00
26 46 15/05/2019 13:57:25 Dinheiro Pendente Stream Miller 1 35.00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
E eu gostaria de fazer um select para que nao repita os dados iguais e que a tabela viesse assim:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bacon Cheddar 1 60.00
Chicken Club Sandwich 1 45.00
26 46 15/05/2019 13:57:25 Dinheiro Pendente Philly Cheese Steak 1 50.00
Smoke House 1 55.00
Stream Miller 1 35.00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Alguem pode me ajudar, qual seria a melhor forma de fazer ?
Essa tabela é gerada com um while no php entao se alguem saber uma outra maneira de montar isso aceito dicas.
php:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
echo "<tr role='row' class='odd'>";
echo "<td class='sorting_1'>" .$resultado['CodigoComanda']. "</td>";
echo "<td>" .$resultado['Nome']."</td>";
echo "<td>" .$resultado['Quantidade']."</td>";
echo "<td>" .$resultado['Preco']."</td>";
echo "<td>" .$resultado['Metodos']."</td>";
echo "<td>" .$resultado['DataPedido']."</td>";
echo "<td>" .$resultado['Situacao']."</td>";
echo "</tr>";
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vlw pessoal
-