我正在开发一个页面,我希望使用日期记录事件。例如如果我们在2016年3月,代码必须为第一个事件生成的值是1_03_2016,那么如果在3月发生另一个事件,则该值将是2_03_2016,那么如果还有另一个事件在3月再次发生,则该值将是3_03_2016,依旧等等。
我做了以下事情:
$date= date('Y-m-d');
$time=strtotime($date);
$month=date("m",$time);
$year=date("Y",$time);
$zuva="";
$previous=0;
$sql = "select * from offense order by id desc limit 1";
$query_result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($query_result)){
$previous = $row['previous'];
$zuva=$row['date'];
}
$time1=strtotime($zuva);
$month1=date("m",$time1);
$year1=date("Y",$time1);
if($month === $month1){
$previous++;
$casenumber = $previous."_".$month."_".$year;
} elseif($date != $zuva){
//$date= date('Y-m-d');
$previous=0;
$previous++;
$casenumber = $previous."_".$month."_".$year;
}
elseif(mysql_num_rows($query_result)==0){
$previous=0;
$previous++;
$casenumber = $previous."_".$month."_".$year;
}
$_SESSION['casenum']=$casenumber;
$_SESSION['previous']=$previous;
}
所以我希望变量$ casenumber为我插入数据库的每个条目递增。这是我要插入的表格的屏幕:
以下是我用来插入的查询:
$query2 = "INSERT INTO `complaint_search` VALUES('','$identification_number','$casenumber')";
$query_run2 = mysql_query($query2) or die(mysql_error());
添加apokryfos代码后:
答案 0 :(得分:2)
您可以将代码简化为:
<?php
function getNextCaseNumberId() {
$date = date('Y-m-d');
$time = strtotime($date);
$month = date("m", $time);
$year = date("Y", $time);
$sql = "select * from `complaint_search` WHERE casenumber LIKE '%_{$month}_{$year}' order by cs_id desc limit 1"; //Assuming your CS_ID is autoincrement
$query_result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($query_result) == 0) {
return "1_{$month}_{$year}";
} else {
$row = mysql_fetch_assoc($query_result);
$lastId=explode("_",$row["casenumber"])[0];
return ($lastId+1)."_".$month."_".$year; //Missed an underscore here
}
}
然后您插入新的投诉,例如:
// Probably best to lock the complaint_search table here
$query2 = "INSERT INTO `complaint_search` VALUES('','$identification_number','".getNextCaseNumberId()."')";
$query_run2 = mysql_query($query2) or die(mysql_error());
//But don't forget to unlock it here
答案 1 :(得分:0)
只是另一种可能的解决方案,而不是您当前的系统,您可能无法实现以下内容:
活动表
@ id,event_name,event_date
examplePanel.add(new JLabel("this is an example"));
然后您可以通过如下查询获得每月的事件数量:
examplePanel.setFont(.......);
所以,如果我们有这个测试数据:
CREATE TABLE Events (
`id` int,
`event_name` varchar(64),
`event_date` timestamp
);
查询将返回以下内容:
SELECT count(event_name) as event_count,
MONTH(event_date) as month
FROM Events
WHERE MONTH(event_date) = 3
GROUP BY LEFT(event_date, 7);
您可以找到fiddle for it here
如果您希望数据库中每月发生的事件数量,那么在PHP方面就可以这样做:
INSERT INTO Events (
id, event_name, event_date
)
VALUES
('1', 'Some Event', '2016-03-01'),
('2', 'Another Event', '2016-03-06'),
('3', 'Event Three', '2016-03-12'),
('4', 'Event Four', '2016-03-18'),
('5', 'Event Five', '2016-03-21')
没有对所有这些进行测试,只是我的一次沉思,我即将下班回家,所以它有点匆匆走向终点,但希望另一个观点可能有所帮助。