Fórum Cálculo dinâmico da idade actual #394792
31/01/2011
0
Encontro-me a desenvolver uma base de dados em Postgresql e gostaria de saber se é possível na mesma tabela
ter uma coluna(idade_actual) que seja automaticamente calculada a partir de uma outra(data de nascimento) em que o utilizador insere este dado na web (a interface está a ser construída em PHP).
Desde já, obrigado pelos esclarecimentos que me possam dar.
Margarida Martins
Curtir tópico
+ 0Posts
01/02/2011
Jair N.
Gostei + 0
01/02/2011
Margarida Martins
Antes demais, obrigado pelo seu feedback.
A actualização deste campo no dia-a-dia tem a ver com uma necessidade prática de quem vai aceder à base de dados que estou a construir.
De facto, ontem numa pesquisa pela net percebi que o que pretendo poderá ser feito em código PHP, por exemplo, através da função:
<?php// Calculate the age from a given birth date// Example: GetAge("1986-06-18");function GetAge($Birthdate){ // Explode the date into meaningful variables list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate); // Find the differences $YearDiff = date("Y") - $BirthYear; $MonthDiff = date("m") - $BirthMonth; $DayDiff = date("d") - $BirthDay; // If the birthday has not occured this year if ($DayDiff < 0 || $MonthDiff < 0) $YearDiff--; return $YearDiff;}?>A minha dúvida, neste momento, tem a ver como chamar a minha variável data_nascimento(no caso da função acima: $Birthdate) e retornar a idade actual(no caso da funçao de cima:$YearDiff) da minha tabela em questão. A variavel idade_actual tem de ser definida de alguma forma especial no Postgresql para depois no PHP, ser retornado o valor da função?
Gostei + 0
01/02/2011
Jair N.
int_idade = SELECT EXTRACT (YEAR FROM AGE(CURRENT_DATE, dat_nascimento)) ;
No seu caso PHP utilizando o próprio recurso da linguagem, o processo deverá atualizar este campo? (ou não)
Recomento apenas guardar valores em campos calculaveis, como por exemplo resultado de uma nota em que a quantidade e o valor unitário não equivalem ao corespondente ao valor total "pode" não apresentar o mesmo valor, que em um comprovante fiscal, independente deste valor estar trucado ou arredondado, neste caso é "recomendado guardar o valor" para evitar aborrecimentos. Já uma caracteristica de diferença entre datas não seria necessário visto que este processo consome recursos e "disparos" toda vêz que for validado.
Assim procede utilizar sua ferramenta PHP...
Gostei + 0
01/02/2011
Margarida Martins
int_idade = SELECT EXTRACT (YEAR FROM AGE(CURRENT_DATE, dat_nascimento)) ;
Sim, o processo deverá actualizar o campo sempre que se acede à base de dados. P.ex. uma pessoa que faz anos a 1986-02-03, deverá aparecer neste momento que tem 24 anos mas daqui a 2 dias já tem 25 anos...
Gostei + 0
01/02/2011
George Santos
Gostei + 0
01/02/2011
Jair N.
Aqui, a opção é fazer uma função para atualizar a base de dados, a exemplo:
-- DROP FUNCTION func_atualiza_idade ()
CREATE OR REPLACE FUNCTION func_atualiza_idade() RETURNS void AS $$
UPDATE minha_tabela
SET idade_atual = EXTRACT (YEAR FROM AGE(CURRENT_DATE, data_nascimento))
WHERE idade_atual IS NULL
OR idade_atual < EXTRACT (YEAR FROM AGE(CURRENT_DATE, data_nascimento));
$$ LANGUAGE SQL;
Bem, tu poderá criar uma função interna, para atualizar sua base toda vêz que logar ou inicializar a tabela
Execute esta função pelo seu PHP:
SELECT func_atualiza_idade();
Como disse, essa opção vai depender do seu executável, a não ser que você crie uma situação para ativação do processo dentro do banco de dados e esse seja ativado por um, digamos "temporizador" que quando a data for menor que a última processada execute...
Gostei + 0
02/02/2011
Margarida Martins
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)