Ir para conteúdo

Arquivado

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

Aureo Almeida

Somar valores de uma consulta

Recommended Posts

Estou com o seguinte problema:

Estou desenvolvendo uma consulta para uma página php com o dreamweaver. Programei uma região repetida para me mostrar 25 registros do Banco de Dados. Gostaria que ao final da página, houvesse a soma dos valores dos 25 registros de um determinado campo. Tenho me deparado com erros, e ao tentar usar a função sum do MYSQL ela me impede que sejam mostrados todos os registros do BD para serem usados numa região repetida. Ela mostra a soma dos valores de um determinado campo. Como é possível ver todos os registros do BD, para serem listados numa região repetida, e ao mesmo tempo fazer a soma dos 25 registros de cada lista?

A consulta básica é:

Select * from despesas.

O campo que desejo somar é CX_VALOR desta tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Aureo é mais fácil então você somar isso via PHP doque via banco de dados.

Acho que o custo de performance será menor. Mas vamos la.

 

SELECT campo1, campo2, campo3, (SELECT SUM(campo4) FROM tabela1) AS soma FROM tabela1

Acredito que a query acima atenda suas necessidades. Basta trabalhar os WHERE's onde houver necessidade.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo.

Obrigado pela tentativa.

No caso de minha tabela o SQL ficaria da seguinte forma, seguindo tua sugestão:

"SELECT *, (SELECT SUM(CX_VALOR) FROM despesa) AS soma FROM despesa"

uma varável seria:

"SELECT despesa.CX_DESTINATARIO, despesa.CX_VALOR, despesa.CX_DATA, (SELECT SUM(CX_VALOR) FROM despesa) AS soma FROM despesa"

A listagem ocorre ok, mas não a soma.

Experimentei SUM(despesa.CX_VALOR)mas também não ocorreu a soma.

Experimentei também remover despesa.CX_VALOR e também não ocorreui a soma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Aureo, acho que uma alternativa seria a seguinte:

SELECT despesa.CX_DESTINATARIO, despesa.CX_VALOR, despesa.CX_DATA, SUM(CX_VALOR) AS soma FROM despesa

Nesse caso na última coluna soma, todos os registros teriam a soma geral incluida para cada linha

 

outra forma, é fazer como o Periscuelo indicou, você efetuar a soma via php para cada registro...

 

deu certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ChuckyBrazil

Não deu certo não. Como estou tabalhando com uma região repetida, ele mostra somente um registro, não lista todos. Creio que vou tentar uma solução em PHP.

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe amigo Aureo montei a query errada.

Tente assim.

 

SELECT campo1, campo2, campo3, tbSoma.soma FROM tabela1, (SELECT SUM(campo4) AS soma FROM tabela1) AS tbSoma

ou seja

 

SELECT despesa.*, tbSoma.soma FROM despesa, (SELECT SUM(CX_VALOR) AS soma FROM despesa) AS tbSoma

Acredito que agora funcione.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo

Mais uma vez agradeço a ajuda, mas quero te informar que a sintaxe SQL

 

Periscuelo

Mais uma vez agradeço a ajuda, mas quero te informar que a sintaxe SQL que me sugeriste também não funcionou. Simplismente não soma. Retorna valor em branco. Eu tenho dois valores inteiros no BD, 34 e 40 cuja soma deveria dar 74. O campo é inteiro no BD Os valores são listado na consuta, mas não somados. Eu insiro via php o seguinte valor <?php echo $row_caixa['soma']; ?>, mas nada. Tentei <?php echo $row_caixa['tbSoma']; ?> e idem.

Estou procurando a solução via php. É um pouco mais complicado, prefereria via SQL, pela simplificação, mas..

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tem alguma coisa de errado na sua base de dados amigo Aureo, pois eu testei esta ultima query

que te mandei e funcionou tudo perfeitamente. O campo CX_VALOR é do tipo float ou int? Você deixou o campo

como NOT NULL padrão 0 ou deixou como NULL e no meio existem valores em branco?

 

Alguma coisa tem de errado. A query é exatamente aquela.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tem alguma coisa de errado na sua base de dados amigo Aureo, pois eu testei esta ultima query

que te mandei e funcionou tudo perfeitamente. O campo CX_VALOR é do tipo float ou int? Você deixou o campo

como NOT NULL padrão 0 ou deixou como NULL e no meio existem valores em branco?

 

Alguma coisa tem de errado. A query é exatamente aquela.

 

Abraços.

 

O campo é int, not NULL e não tem valor em branco. Ele está com dois valores para teste somente, que são os que eu informei.Quanto a query, eu copiei e colei. Ela não dá erro em tempo de execução. Somente não dá valor para o alias soma. Como falei, ela lista mas não soma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aureo, posta ai o script de create table da sua tabela "despesas" pra gente ver!

$maxRows_caixa = 25;

$pageNum_caixa = 0;

if (isset($_GET['pageNum_caixa'])) {

$pageNum_caixa = $_GET['pageNum_caixa'];

}

$startRow_caixa = $pageNum_caixa * $maxRows_caixa;

 

mysql_select_db($database_caixa, $caixa);

$query_caixa = "SELECT despesa.*, tbSoma.soma FROM despesa, (SELECT SUM(CX_VALOR) AS soma FROM despesa) AS tbSoma";

$query_limit_caixa = sprintf("%s LIMIT %d, %d", $query_caixa, $startRow_caixa, $maxRows_caixa);

$caixa = mysql_query($query_limit_caixa, $caixa) or die(mysql_error());

$row_caixa = mysql_fetch_assoc($caixa);

 

if (isset($_GET['totalRows_caixa'])) {

$totalRows_caixa = $_GET['totalRows_caixa'];

} else {

$all_caixa = mysql_query($query_caixa);

$totalRows_caixa = mysql_num_rows($all_caixa);

}

$totalPages_caixa = ceil($totalRows_caixa/$maxRows_caixa)-1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Aureo ele pediu o script da Tabela SQL

não seu código PHP. :huh:

 

Para pegar o script da tabela va no phpMyAdmin

exporte a tabela e cole o código para nós.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Aureo ele pediu o script da Tabela SQL

não seu código PHP. :huh:

 

Para pegar o script da tabela va no phpMyAdmin

exporte a tabela e cole o código para nós.

 

Abraços.

 

 

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

 

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

 

--

-- Banco de Dados: `caixa`

--

 

-- --------------------------------------------------------

 

--

-- Estrutura da tabela `despesa`

--

 

CREATE TABLE IF NOT EXISTS `despesa` (

`CX_ID` int(11) NOT NULL AUTO_INCREMENT,

`CX_DESCRICAO` varchar(250) NOT NULL,

`CX_DESTINATARIO` varchar(100) NOT NULL,

`CX_DOC_DEST` varchar(20) NOT NULL,

`CX_VALOR` int(15) NOT NULL,

`CX_DATA` date NOT NULL,

PRIMARY KEY (`CX_ID`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

 

--

-- Extraindo dados da tabela `despesa`

--

 

INSERT INTO `despesa` (`CX_ID`, `CX_DESCRICAO`, `CX_DESTINATARIO`, `CX_DOC_DEST`, `CX_VALOR`, `CX_DATA`) VALUES

(1, 'Pagamento agua', 'CORSAN', '433333', 34, '2011-05-30'),

(2, 'Pagamento LUZ', 'RGE', '433333', 40, '2011-05-30'),

(3, 'Pedreiro', 'Antonio CArlos', '33333', 50, '2011-06-01');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para mim funcionou perfeitamente amigo. Criei

sua tabela aqui e usei a query que te passei.

A soma deu 124.Qual a versão do MySQL que você

esta usando? Talvez seja melhor reinstalar ele.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para mim funcionou perfeitamente amigo.

Usei a query que te passei e a soma deu 124.

Qual a versão do MySQL que você esta usando?

Talvez seja melhor reinstalar ele.

 

Abraços.

 

A versão do MYSQL é a 5.1.37. Vou tentar reinstalar e ver se funciona.

Obrigado pelas dicas.

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.