2017-05-09 111 views
0

我正在使用Codeigniter + MySQL + Active Record构建项目。在数据库中添加序列号,每年重置

在我MySQL分贝我有一个名为表请求与列协议并在那里我存储的请求的一般信息,一些列(如标题,主题等),没有什么特别的提及。

协议和年份是TYPE INT,必须像下面那样自动生成。

每年在01/01/XXXX-00:00:00的字段必须重置为1号(01/01/XXXX后保存的第一个请求,必须有协议1的值),并为即将到来的请求,增加1它按顺序,直到明年等。

要重置协议,我会在后面的阶段添加一个cron,我会重新设置一个技巧。仍然不知道如何。

我现在需要做什么:

每当我添加一个新的request,新行的必须增加1

伪代码:

new_protocol = previous_protocol + 1 

我在做什么到目前为止

我在我的模型中插入一个新的请求,但到目前为止我没有做任何关于协议号的功能,我通过我的表单手动输入。

public function addRequest($request) { 
    $this->db->insert('requests', $request); 
    if ($this->db->affected_rows() == 1) 
     return $this->db->insert_id(); 
    return FALSE; 
} 

什么是最有效的方法来实现这一目标?

  1. 我应该在控制器中找到最后一个协议号 - >添加1 - >发送给模型添加?
  2. 我应该在模型中找到最后和最大的数字 - >添加1 - >插入数据库?
  3. 还有别的吗?

任何想法将不胜感激。

+0

听起来极像是你可能会得太多这儿的东西。这可能会变得相当混乱,特别是考虑到闰年的时候,所以你需要问自己两个问题。你为什么需要这个,真的值得吗? – GordonM

+0

这就是协议的工作方式(我住的地方)。 – GeorgeGeorgitsis

+0

至于如何实际做到这一点,我只需创建一个DATE列,存储当前日期,然后使用%j从DATE_FORMAT中获取1-366年的一天 – GordonM

回答

0

好吧,于是我在Codeigniter中创建了一个library,并编写了2个函数,1个在Library中,另外1个在Model中。

图书馆

public function getProtocolNumber() { 
     $CI = &get_instance(); 
     $year = date('Y'); 
     $max_protocol = $CI->request_model->getYearsProtocol($year); 
     $max_protocol = $max_protocol['max_protocol_number']; 

     if ($max_protocol && !empty($max_protocol) && $max_protocol != NULL) { 
      $protocol_number = (int) $max_protocol + 1; 
     } else { 
      $protocol_number = 1; 
     } 

     return $protocol_number; 
    } 

型号

public function getYearsProtocol($year) { 
     $qry = $this->db->select('MAX(protocol_number) as max_protocol_number') 
       ->from('requests') 
       ->where('protocol_year', $year) 
       ->get(); 
     if ($qry->num_rows() > 0) 
      return $qry->row_array(); 
     return FALSE; 
    } 
0

我接近,像这样:

  1. 在表中添加列ID,并将其设置为自动递增
  2. PHP - 设置默认的时区使用(因为PHP 5。1):date_default_timezone_set('UTC');
  3. PHP - 获得本年度:$cyear=date("Y");
  4. GET行max(ID)和比较,如果存储一年相比改变$cyear

,如果它已经改变,下面的伪代码示例:

new_protocol = 1 

否则

new_protocol = previous_protocol + 1