mysql通过使用DOB字段和基于计算年龄的数据库的自动存储类别来触发计算年龄

时间:2015-11-24 15:05:58

标签: mysql codeigniter triggers

这就是案例......

这些是一些数据库结构。

  • 姓名
  • DOB
  • 类别

类别字段将根据提供的DOB基于计算的年龄自动提供(儿童,成人,年轻)。

我正在使用Mysql

在插入mytable之前创建TRIGGER ins_data 对于每一行     BEGIN

--calculate first age form DOB--
--based on the calulated result--
--my category field will be as (children, young or adult)--
--insert data into the database--
END;//

3 个答案:

答案 0 :(得分:1)

使用像这样的mysql,

SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age FROM table_name;

在php中

<?php
    $cur= date('Y');
    $dob = date('Y',strtotime("database value here"));
    echo $cur - $dob;
?>

无需在数据库中存储年龄。(已由Digital Chris建议)

答案 1 :(得分:0)

分隔符//

在插入mytable之前创建TRIGGER ins_data 对于每一行     BEGIN

--calculate first age form DOB--
--based on the calulated result--
--my category field will be as (children, young or adult)--
--insert data into the database--
END;//

答案 2 :(得分:0)

当我试着在我的评论中解释时,你不想在你的数据库中存储这样的东西。一旦你这样做,它就会成为一种维护问题,并且几乎立即过时。例如:一个9岁的人进入数据库。下周是他的生日。他现在已经10岁了,但数据库仍然有child (0-9)的条目供他使用。糟糕的设计。

而是选择您想要的内容:

SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age,
CASE 
     WHEN TIMESTAMPDIFF(YEAR, dob, CURDATE()) < 10 then "child" 
     WHEN TIMESTAMPDIFF(YEAR, dob, CURDATE()) > 14 then "adult"
     ELSE "young"
END as category
FROM table_name;

以下是它的实施方案:http://sqlfiddle.com/#!9/bbc860/1