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