基于now()时间戳将学年保存到MySQL数据库?

时间:2015-12-03 09:59:19

标签: php mysql

我正在运行一个大学服务台办公室,员工使用php表单在MySQL数据库中注册他们已经回答的查询。

基本上,表单会创建一些值,这些值在php中存储为变量,然后保存在数据库中,如下所示:

$employeename = $_POST['employeename'];
$medium = $_POST['medium'];
$timespent = $_POST['timespent'];

$query = "INSERT INTO queries VALUES ('',now(),'$employeename','$medium','$timespent')";
mysqli_query($con,$query);

这给了我以下表格结构:

id | timestamp            | employeename | medium | timespent
 1 | 2015-11-30 10:52:57  | Jennifer     | e-mail | 5
 2 | 2015-11-30 10:55:02  | Jason        | phone  | 2

我想在我的MySQL数据库中添加一个列,用于存储保存每个查询的学年,因为在计算保存的查询数时,我会经常使用此分组。

我们的学年是写于2013/2014年,2014/2015年,2015/2016年等。每个学年都涵盖9月1日至8月31日,即所有包含2015-09-01 00:00:00(包括但不包括2016-09-01 00:00:00)的时间戳的查询都应将“2015/2016”保存在数据库的学年专栏中。

我正在寻找PHP代码,我需要将我的MySQL查询中的“now()”解释为正确的学年并将其保存到我的数据库中,最好是以我不必添加上一个/的方式即将到来的学年我的代码(即如果用户在2020年9月1日保存查询,脚本会自动知道将学年保存为2020/2021)。

非常感谢任何帮助。我很抱歉不包含任何示例代码。原因是我不知道如何做到这一点,因此不确定要阅读什么。

3 个答案:

答案 0 :(得分:1)

您可以使用MySQL使用以下公式:

 CONCAT(
    @a:=IF(MONTH(NOW())<9,YEAR(NOW())-1,YEAR(NOW())),
    "/",
    @a+1) year 

根据月份估算当前学年的第一年,然后使用变量连接第二年。

答案 1 :(得分:0)

或者添加一个新的Field女巫为你做这件事。如果您使用PERSITENT类型,您还可以在其上设置INDEX。

ALTER TABLE queries
ADD COLUMN `ayear` VARCHAR(10) AS (
  IF( `timestamp`  >= DATE_FORMAT(`timestamp` , '%Y-09-01 00:00:00') ,
    CONCAT( YEAR( `timestamp` ),'/',YEAR( `timestamp` )+1) ,
    CONCAT( YEAR( `timestamp` )-1,'/',YEAR( `timestamp` ))
  )
)  PERSISTENT;

此处为结果和CREATE TABLE:

MariaDB [test]> select * from queries;
+----+---------------------+-----------+
| id | timestamp           | ayear     |
+----+---------------------+-----------+
|  1 | 2015-12-01 00:00:00 | 2015/2016 |
+----+---------------------+-----------+
1 row in set (0.00 sec)

MariaDB [test]> INSERT INTO `queries` (`id`, `timestamp`) VALUES (2, '2015-08-01 00:00:00');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> INSERT INTO `queries` (`id`, `timestamp`) VALUES (3, '2015-08-31 12:00:00');
Query OK, 1 row affected (0.01 sec)

MariaDB [test]> INSERT INTO `queries` (`id`, `timestamp`) VALUES (4, '2015-09-15 15:00:00');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from queries;
+----+---------------------+-----------+
| id | timestamp           | ayear     |
+----+---------------------+-----------+
|  1 | 2015-12-01 00:00:00 | 2015/2016 |
|  2 | 2015-08-01 00:00:00 | 2014/2015 |
|  3 | 2015-08-31 12:00:00 | 2014/2015 |
|  4 | 2015-09-15 15:00:00 | 2015/2016 |
+----+---------------------+-----------+
4 rows in set (0.00 sec)

MariaDB [test]>

CREATE TABLE `queries` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `timestamp` timestamp NULL DEFAULT NULL,
  `ayear` varchar(10) AS (
  IF( timestamp  >= DATE_FORMAT(timestamp , '%Y-09-01 00:00:00') ,
    CONCAT( YEAR( timestamp ),'/',YEAR( timestamp )+1) ,
    CONCAT( YEAR( timestamp )-1,'/',YEAR( timestamp ))
  )) PERSISTENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案 2 :(得分:-1)

Carbon具有提供日期,月,年前的时间戳的功能。 假设你有这个学年:

$thisyear->carbon:now();

和前一年

$preyear->carbon:now()->subYears(1);

然后将这两个传递给字符串并粘贴到Mysql作为范围。