在数据库中添加序列号,每年重置一次

时间:2017-05-09 08:15:05

标签: php mysql codeigniter

我正在使用Codeigniter + MySQL + Active Record构建项目。

在我的MySQL数据库中,我有一个名为请求的表,列协议以及我存储的其他一些列请求的一般信息(如标题,主题等......),没什么特别值得一提的。

协议和年份为TYPE INT,必须自动生成,如下所示。

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

要重置协议,我将在稍后的阶段添加一个cron,我将做一个技巧来重置。还是不知道怎么做。

  

我现在需要做什么:

每当我添加新的request时,新行的protocol必须增加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. 我应该在模型中找到最后和最大protocol号码 - >添加1 - >插入db?
  3. 别的什么?
  4. 任何想法都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

我接近这样:

  1. 在表格中添加列ID并将其设置为自动递增
  2. php - 设置要使用的默认时区(自PHP 5.1起):date_default_timezone_set('UTC');
  3. php - 获取当前年份:$cyear=date("Y");
  4. 获取行max(ID)并比较存储的年份是否与$cyear
  5. 相比发生了变化

    如果它已更改并遵循您的伪代码示例:

    new_protocol = 1
    

    ,否则

    new_protocol = previous_protocol + 1
    

答案 1 :(得分: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;
    }