Php 根据3个参数(加入日期、出生日期、学校学年)检查学生是否为托儿所、学前教育、幼儿园
我目前在代码中应用学年的概念时遇到问题, 如果我不申请,有一件事可能会出错 学年的概念,只需使用生日和当前日期即可获得孩子的水平 它无法检测出孩子是否还在幼儿园或者已经是幼儿园了。 我已经意识到,要实现这一点,我需要一个名为“Date Joined”的列 我已经把它加到我的桌子上了。现在我的问题是如何使用它 我到目前为止所做的一切 我当前的sql语句分为3条,我将其命名为ClassTypePhp 根据3个参数(加入日期、出生日期、学校学年)检查学生是否为托儿所、学前教育、幼儿园,php,mysql,Php,Mysql,我目前在代码中应用学年的概念时遇到问题, 如果我不申请,有一件事可能会出错 学年的概念,只需使用生日和当前日期即可获得孩子的水平 它无法检测出孩子是否还在幼儿园或者已经是幼儿园了。 我已经意识到,要实现这一点,我需要一个名为“Date Joined”的列 我已经把它加到我的桌子上了。现在我的问题是如何使用它 我到目前为止所做的一切 我当前的sql语句分为3条,我将其命名为ClassType ClassType **4** - 4 years old below (Nursery) **5** -
ClassType
**4** - 4 years old below (Nursery)
**5** - between 4 yr old and 6 yr old (Pre-k)
**6** - 6 years old above (kindergarten)
sql语句:
SELECT
c.ChildID,
c.ChildName,
TIMESTAMPDIFF(YEAR, c.Birthdate, CURDATE()) as Age,
cls.ClassID,
CASE WHEN
(cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) <= 4 THEN 4
WHEN
(cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) = 5 THEN 5
WHEN
WHEN (cls.ClassTypeAgeNo = 2) AND TIMESTAMPDIFF(Year, c.Birthdate, CURDATE()) >= 6 THEN 6
END AS ClassType
FROM m_Student c
inner join m_Class cls on c.ClassID = cls.ClassID
上述查询的结果
我期望的结果仍然是一样的,但它必须检查孩子
是否仍在同一水平上取决于学年
我当前的代码可以正确地检查孩子是否在什么级别,但它不能
检测子对象是否仍在同一级别或移动到另一级别
编辑:
学校从2015年4月1日开始,到2016年3月31日结束。关于加入日期如何影响水平没有足够的信息,但我认为解决方案可能接近这一点:
SELECT
c.ChildID,
c.ChildName,
TIMESTAMPDIFF(YEAR, c.Birthdate, CURDATE()) as Age,
cls.ClassID,
CASE WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) <= 4 THEN 4
WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) = 5 THEN 5
WHEN
(cls.ClassTypeAgeNo = 2) AND (TIMESTAMPDIFF(Year, c.Birthdate, c.date_joined) -
CASE WHEN MONTH(c.date_joined) > 4 THEN 1 ELSE 0 END) >= 6 THEN 6
END AS ClassType
FROM m_Student c
inner join m_Class cls on c.ClassID = cls.ClassID
帮助我们通过提供示例数据和预期结果来帮助您。我发布了一些示例数据,但我没有足够的图片代表,因此我将编写它。