我正在运行一个大学服务台办公室,员工使用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)。
非常感谢任何帮助。我很抱歉不包含任何示例代码。原因是我不知道如何做到这一点,因此不确定要阅读什么。
答案 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作为范围。