Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

01-12-2009 15:57

ae web, blz, velho olha só, não sei se tem como, mas não custa nada perguntar, da para fazer uma tabela fazer uma auto soma, com base em outra?

suponhamos que temos a tabela com o nome de "compras" ai temos as colunas
id | valor
244 | 51.66
244 | 5.55
2 | 1.22
2 | 2.00

se somarmos o id 244 tem um total de 57.21 e o id 2 tem 3.22

tem como uma tabela fazer esta auto soma? por exemplo criar uma tabela com o nome "autosoma" com as colunas

id | valor
244 | 57.21
2 | 3.22

ai sempre quando é inserido um novo valor na tabela "compras" o valor já é somamado na tabela "autosoma"?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Auto soma no mysql direto na tabela

01-12-2009 20:35

Primeiro você terá que fazer um SELECT DISTINCT, explicado no link abaixo

http://www.codigosnaweb.com/forum/DISTI ... _2152.html

Nessa query, você vai ter que adicionar essa base, para pegar o valor do campo, por exemplo

SUM(campo_com_valor) AS total

Ai $total vai ser usado no while para mostrar essa soma.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

01-12-2009 22:15

deixa só eu ver se vc entendeu a minha pergunta, eu queria que a própria tabela "compras" do mysql insira os dados já somados da coluna "valor" para a tabela "compras".

Sem que use um comando no php, htm....etc, tipo colocar uma regra dentro do mysql para a cada valor lançado na coluna "valor", ele atualiza o valor da outra tabela (nome"compras"),

pelo que eu entendi, eu tenho que utilizar sempre com um comando em php...htm..., mas não é isso que eu quero.

quero que o mysql efetue essa regra, tem como?
é que no mssql server eu consigo fazer isso, mas no mysql eu não sei!?! :star
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Auto soma no mysql direto na tabela

02-12-2009 08:41

ah, então, você tem que fazer a query que realiza a soma, e joga o valor na coluna, ou, fazer dessa forma que indiquei, assim, esse valor já é mostrado somado na hora da consulta.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 75 postagens
Mais de 75 postagens
Mensagens: 96
Nome: Júnior
Descrição do site: Voltado para o Desenvolvimentos de Sistemas
Localização: Goiania
Contato:

Auto soma no mysql direto na tabela

02-12-2009 15:28

Boa tarde como que vc faz no mssql vc usa alguma Stored procedure, se usar vc pode esta pesquisando como vc faz para esta criando a mesma Stored procedure no mysql, assim vc consegue." Lembrando que o mysql faz pouco tem que esta Stored procedure", do geito que vc falou deve esta usando, agora e so dar uma pesquisa que vai dar certo, mais nao minha opniao seria mais facio vc fazer igual o web falou e so criar uma queri para pegar o ultimo valor e somar com o valor na outra tabela
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

03-12-2009 12:51

Amigão,

Não sei se entendi bem a sua necessidade, mas, naturalmente, voce deve ter uma tabela que armazena o numero da compra, data e total, etc e outra que armazena os itens da mesma, correto?

Veja um exemplo utilizando "triggers", que poderá te dar uma luz para resolução do seu problema:

Você precisa ter o MySQL 5.xx.

Tabela compras:
Use a tag Code para scripts

CREATE TABLE `compras` ( `IDCOMPRA` int(11) NOT NULL auto_increment, `TOTAL` decimal(10,2) default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Tabela itens (da compra) + triggers:
O campo IDCOMPRA nesta tabela se refere ao campo IDCOMPRA da tabela compras.

CREATE TABLE `itens` ( `ID` int(11) NOT NULL auto_increment, `IDCOMPRA` int(11) default NULL, `VALOR` decimal(11,0) default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TRIGGER `itens_incluir` AFTER INSERT ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = (SELECT SUM(VALOR) FROM itens WHERE COMPRA = new.COMPRA) where ID = new.COMPRA; END; CREATE TRIGGER `itens_alterar` AFTER UPDATE ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = (SELECT SUM(VALOR) FROM itens WHERE COMPRA = old.COMPRA) where ID = old.COMPRA; END;

Explicando
A trigger `itens_incluir` é disparada quando se inclui um novo item na compra.
Observe o prefixo "new" junto ao campo, já que estamos incluindo um novo registro.

A trigger `itens_alterar` é disparada quando se altera um item na compra.
Observe o prefixo "old" junto ao campo, já que estamos alterando um registro já existente.

Neste exemplo, quando incluirmos ou alterarmos um item da compra as "triggers" irão atualizar o total na tabela compra que tiver o mesmo IDCOMPRA do item que estamos processando.

Espero ter ajudado,

Silvio Santos
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

03-12-2009 13:04

Olá desculpe!

Eu havia alterado as trigger do exemplo, e acabei mandando errado (apenas o campo COMPRA, o correto é IDCOMPRA).

Segue o correto:

CREATE TABLE `compras` ( `IDCOMPRA` int(11) NOT NULL auto_increment, `TOTAL` decimal(10,2) default NULL, PRIMARY KEY (`IDCOMPRA`), UNIQUE KEY `ID` (`IDCOMPRA`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; UPDATE compras SET TOTAL = (SELECT SUM(VALOR) FROM itens WHERE IDCOMPRA = old.IDCOMPRA) where ID = old.IDCOMPRA; END; CREATE TABLE `itens` ( `ID` int(11) NOT NULL auto_increment, `IDCOMPRA` int(11) default NULL, `VALOR` decimal(11,0) default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TRIGGER `itens_incluir` AFTER INSERT ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = (SELECT SUM(VALOR) as VALOR FROM itens WHERE IDCOMPRA = new.IDCOMPRA) where IDCOMPRA = new.IDCOMPRA; END; CREATE TRIGGER `itens_alterar` AFTER UPDATE ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = (SELECT SUM(VALOR) FROM itens WHERE IDCOMPRA = old.IDCOMPRA) where IDCOMPRA = old.IDCOMPRA; END;

Pode testar agora...

Feliz Natal a todos, mas honre o verdadeiro aniversariante, Jesus Cristo...

Silvio Santos
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

03-12-2009 23:33

silvio-rob, a ideia é essa mesmo, eu nunca usei o trigger, e esta dando erro na hora de colocar a trigger, ele não executa, esta retornando a seguinte mensagem, lembrando que o meu mysql é superior a 5.x.x
a tabela compras e itens eu consegui instalar e joguei uns valores para tentar executar, mas esta dando erro no trigger

erro:
consulta SQL: Documentação CREATE TRIGGER `itens_incluir` AFTER INSERT ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = ( SELECT SUM( VALOR ) AS VALOR FROM itens WHERE IDCOMPRA = 'new.IDCOMPRA' ) ; Mensagens do MySQL : Documentação #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

04-12-2009 00:46

VERERANO, voce não está criando a TRIGGER exatamente como te informei:

CREATE TRIGGER `itens_incluir` AFTER INSERT ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = (SELECT SUM(VALOR) as VALOR FROM itens WHERE IDCOMPRA = new.IDCOMPRA) where IDCOMPRA = new.IDCOMPRA; END;

Esta parte "where IDCOMPRA = new.IDCOMPRA ", que está fora do parentese me parece que você omitiu, correto?
Penso que voce acha que foi um erro meu, mas ela se refere à tabela compras, enquanto o que está entre parenteses se refere à tabela itens.

Outra coisa: no seu retorno vejo que voce digitou new.IDCOMPRA entre aspas, quando o correto é sem as aspas mesmo.

idem para a TRIGGER "itens_alterar".

Veja aí e retorne.

Silvio
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

04-12-2009 00:50

VETERANO, eu disse que voce omitiu algo, mas acho que quem omitiu foi seu programa de onde vc copiou o erro. rsrs

Retire as aspas onde te falei, e deverá dar certo.

Silvio
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

04-12-2009 09:55

silvio-rob, oha só retornou novamente o erro, o mysql nao esta aceitando esta query, veja o erro que retorna, coloquei do jeito que vc informou.

CREATE TRIGGER `itens_incluir` AFTER INSERT ON `itens` FOR EACH ROW BEGIN UPDATE compras SET TOTAL = ( SELECT SUM( VALOR ) AS VALOR FROM itens WHERE IDCOMPRA = new.IDCOMPRA ) WHERE IDCOMPRA = new.IDCOMPRA; Mensagens do MySQL : Documentação #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

04-12-2009 13:08

VETERANO,
Que programa voce usa para gerar as TRIGGERS?
Onde voce esta colocando/executando este script?

Voce não está tentando executá-lo dentro do seu aplicativo de compras, correto?

Estas TRIGGERS devem ser criadas da mesma forma que se cria as tabelas (com script).

Veja o video demonstrando a criação das TRIGGERS:
http://www.silviosantos.org/video_triggers_mysql.avi
(Atenção: tente baixar o video mais tarde. Ocorreu um erro de FTP)

Baixe-o e assista.

Silvio
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

04-12-2009 14:04

estou usando dentro do phpmyadmin em SQL!
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

04-12-2009 15:44

Você baixou o vídeo? Viu o exemplo? Não tem como dar erro se fizer como mostro no video.

No phpmyadmin deve estar havendo alguma limitação para executar certos scripts.

Eu usei phpmyadmin a muitos meses atrás, até descobrir outras alternativas bem mais sofisticadas e poderosas. aff!!!

Conheça esta ferramenta (no vídeo eu falo sobre ela):
http://www.sqlmanager.com.br/html/sql_m ... mysql.html

No site http://www.sqlmanager.net, havia uma versão free; procure lá.

também no site da MySQL.COM voce encontra o pacote MySQL GUI Tools que tem algumas ferramentas
interessantes.

Silvio
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17737
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Auto soma no mysql direto na tabela

04-12-2009 21:02

Até fazendo de uma forma isso que precisa mais fácil, se você pegar como base o exemplo que deixei, de fazer a consulta com o distinct, e mostrar o resultado, você pode a partir daí usar um INSERT em cada laço do while para jogar esses valores em outra tabela.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

04-12-2009 23:25

silvio-rob, consegui fazer, baixei o sql manager, e deu certo, só me diz uma coisa, tem como eu colocar uma trigger para cada nova IDCOMPRA inserida na tabela itens, para que fique tudo automático?

acontece o seguinte, ao colocar uma nova idcompra na tabela itens, e se essa nova idcompra não estiver na tabela compras ele não soma por não haver nehuma idcompra na tabela.

como fazer isso??

web, quero aprende essa do distinct direito também, pelo que eu entendi ele faz uma consulta da tabela e inseri na nova, por enquanto tenho urgência nessa do silvio-rob pois preciso usar outras funções, mais complexas, pois estou fazendo um script de afiliados onde os usuários ganham pontos....blablabla...rs, mas vou fazer um teste com o distinct tambem.
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

06-12-2009 00:37

Tajiri, veja bem!

Sobre o que voce disse sobre criar uma nova trigger para cada compra ou item, informo que não tem como e não há necessidade. A trigger é unica e valerá para todas as compras (ufa!!!).

O que acontece é que pelo que vejo você está inserindo itens em uma compra que não existe, não é (nova compra)?

Na regra de negócios, voce precisa iniciar uma compra para posteriormente incluir os itens, entende!

Exemplo:
Sou um vendedor e vou vender para um cliente em uma loja onde trabalho.

Normalmente vou ter que iniciar um nova venda (na tabela de vendas (não de itens), onde vai o codigo do cliente, forma de pagamento, data da venda, codigo do vendedor, total da venda, etc).

Então eu preciso que os dados iniciais acima citados existam (no banco de dados), para que eu possa então incluir os itens nesta venda, pois o sistema precisa incluir o CODIGO da venda em cada item, como eu te mostrei no exemplo.

Voce baixou o vídeo? Viu que primeiramente eu inclui a compra e depois os itens? Pois é; esse é o caminho!

Resumindo, no seu caso:
Inicie um nova compra, preencha os dados iniciais como mencionei acima e
grave a compra (tabela compras), para que o novo codigo seja disponibilizado.
Em seguida, inclua os itens da compra.
(Claro que seu sistema precisa ler esse código da compra no momento da inclusão dos itens).

Na verdade até agora não sei que tipo de sistema é este que voce está desenvolvendo nem em que linguagem, mas é como eu te falei.

Normalmente em uma empresa, quando se trata de compras, refere-se ao abastecimento do estoque (a empresa comprando do fornecedor). Já quando se trata de vendas, aí sim, é a empresa vendendo a seus clientes.
Qual é o seu caso?

Silvio
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

06-12-2009 09:40

é, foi o que eu imaginei, mas a trigger me ajudou no meu caso, na verdade estou desenvolvendo um club de vantagens e a cada indicado, a pessoa ganha 0,89 centavos e ai quando o indicado confirma o seu cadastro no banco de dados a pessoa que o indicou ganha 0,89 tambem...ai simplificando a pessoa troca os pontos por ingressos, se não me engano a cada 20 indicações confirmadas a pessoa ganha um ingresso, e assim vai....

mas muito obrigado, foi bom aprende sobre a trigger...

agora falta eu aprender a distinct, vou dar mais uma lida sobre isso!

obrigado, :help
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

07-12-2009 13:34

Ok meu caro,

O DISTINCT não seria interessante para este seu caso, não...

Pelo menos eu (no meu ponto de vista) nunca usaria.

O DISTINCT como o a propria palavra diz, seria utilizado para retornar valores distintos nas tabelas.

Um exemplo bem básico do uso do DISTINCT (apenas para você compreender):

SELECT DISTINCT UF FROM clientes

Isso retornaria as siglas dos Estados dos Clientes cadastrados (sem repetir), .

Ok???

Qualquer outra dúvida, compartilhe-a conosco...

Silvio
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 290
Localização: Parana/curitiba/brasil
Contato:

Auto soma no mysql direto na tabela

07-12-2009 21:30

silvio-rob, cara só para dizer, quando eu estava tentando usar a trigger pelo mysql, ela não criava por que o usuário não tinha privilégios suficientes, agora ocorre o mesmo com o banco de dados da net, ela não deixa criar, por mais que no servidor web eu tenha todas as permissões possíveis, e agora como que eu faço?

o erro é: acesso não permitido por não ter super privilégios!
0
 
Mais de 10 postagens
Mais de 10 postagens
Mensagens: 10

Auto soma no mysql direto na tabela

07-12-2009 23:03

Normalmente em servidores compartilhados acontece essas limitações.

Entre em contato com o suporte do servidor e veja a possibilidade de resolver isso.

Talvez eles possam criar as triggers para voce, caso não altere os privilégios do usuário MySQL.

Silvio
0

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado