2017-05-09 71 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