[SP-pm] Problema para pegar o registro anterior de uma tabela

Lucas Moraes lucastiagodemoraes at gmail.com
Thu Sep 8 05:24:07 PDT 2011


Gente tenho 3 tabelas "peca",  "operacao" e "apontamento":

CREATE TABLE peca (
pec_id SERIAL,
pec_cli_id INT NOT NULL,
pec_codigo VARCHAR(30) NOT NULL,
pec_denominacao VARCHAR(60) NULL,
PRIMARY KEY(pec_id)
);

CREATE TABLE operacao (
ope_id SERIAL,
ope_pec_id INT NOT NULL,
ope_maq_id INT NOT NULL,
ope_numero VARCHAR(3) NOT NULL,
ope_descricao VARCHAR(80) NOT NULL,
ope_denominacao VARCHAR(100) NOT NULL,
PRIMARY KEY(ope_id)
);

CREATE TABLE apontamento (
apo_id SERIAL,
apo_ser_id INT NOT NULL,
apo_fun_id INT NOT NULL,
apo_ope_id INT NOT NULL,
apo_uni_id INT NOT NULL,
apo_oco_id INT NOT NULL,
apo_quantidade INT NULL,
apo_refugada INT NULL,
apo_data_inicial DATE NOT NULL,
apo_data_final DATE NULL,
apo_hora_inicial TIME NOT NULL,
apo_hora_final TIME NULL,
apo_status INT NOT NULL,
apo_obs TEXT NULL,
PRIMARY KEY(apo_id)
);

Relacionamentos
tabela peca has_many operacao
tebela operacao has_many apontamento

a tabela peca contem o id do cliente e dados da peça
a tabela operacao contem as operacoes para fabricar a peca e cada operacao
contem um numero, normalmente: operacao 1: 10, operacao 2: 20, operacao 3:
35
a quantidade de operacao varia de peça para peça e os numeros tambem varia
de peça para peça.
a tabela apontamento é como se fosse um relatório de produção de cada
funcionario com data inicial e final, hora inicial e final e quantidade que
produziu.

agora eu vou explicar o que eu quero, cada operacao depende da operacao
anterior para produzir, então eu gostaria de pegar pegar a quantidade
produzida da operacao anterior para colocar de saldo na operacao que vai ser
iniciada. Com ajuda no irc eu cheguei a esse código:

return $valor->resultset('Operacao')->search(
        {
            ope_numero => {'<' => $numero},
            'apontamento.apo_ser_id' => $id
        },
        {
            join => 'apontamento',
            rows => 1,
            group_by => 'ope_numero',
        }
    )->get_column('apontamento.apo_refugada')->sum;

esse código acima funciona em partes, só funciona quando só tem uma operação
anterior, quando tem mais de 2 operacao anterior, ele esta retornando a que
é verdadeira.

espero que tenham entendido.

Obrigado.
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110908/623e2a0e/attachment.html>


More information about the SaoPaulo-pm mailing list