2017-02-16 2 views
0

Привет, у меня возникли проблемы с введением номера отслеживания в базу данных. кажется, что в некоторых случаях он генерирует дубликат записи. Я генерирую базу отслеживания в последней записи в моей таблице first_track и увеличиваю ее на 1. Теперь моя проблема в том, что когда пользователь нажимает одновременно. он генерирует один и тот же номер отслеживания. как я могу это предотвратить? Кстати, вот мой код в генерации номера отслеживания. Я также возвращаю счет до 0001 каждую 1-ю запись каждого месяца.Предотвращение повторной записи с использованием php и mysql в codeigniter

<!----------Model--------> 
      $this->db->order_by("first_trackid", "desc"); 
     $query = $this->db->get('first_track'); 
     if($query->num_rows() > 0) 
     { 
      $result = $query->result(); 
      if(date('m') != substr($result[0]->dtsno,2,2)){ 
       $dtsno = date('ym').'0001';     
       } 
      else{ 
       $dtsno = $result[0]->dtsno+1; 
      } 
      return $dtsno; 

     } 
     else 
     { 
      return $dtsno = date('ym').'0001';     
     } 
<!--- END model-------> 
<!---controller-----------> 
//call the model for generating dtsno 
$firsttrack->dtsno = $this->user_information_model->dtsno(); 
//insert to table first_entry 
$this->user_information_model->first_track($firsttrack); 
+0

Вы хотите создать идентификатор трека в последовательном формате или в любом случайном нет? –

+0

Я хочу сгенерировать его с шагом в месяц. например, в январе 2017 года первая запись будет 17010001, тогда следующая запись для января будет 17010001 + 1. 17 будет годом, а 01 будет месяц, а следующие 4 цифры будут количеством отслеживаемых номеров в месяц. – PiDO

+0

. Итак, вы дублируете код, когда в одно и то же время отправляется более одного пользователя? –

ответ

1

Прежде всего, для того, чтобы убедиться, что вы не получите дублированные значения в базе данных, убедитесь, что вы индекс (Установите его в качестве единственной) колонки («first_trackid»), который держит отслеживая номер в стол first_track.

Во-вторых, вы используете временный номер последовательности треков, основанный на отметке времени, когда пользователь инициирует процесс.

Фактическое поколение отслеживающего номера должно происходить, когда пользователь переходит к завершению всего процесса или, другими словами, сохраняет запись. В это время сгенерируйте это число и отобразите его соответствующим образом. Таким образом, вы можете гарантировать, что значения никогда не будут дублированы в вашей схеме.

С уважением

+0

Привет, спасибо за ваш ответ. что я сделал, я генерирую номер отслеживания после того, как пользователь отправляет данные, но все же некоторое время генерирует дублирующий номер отслеживания. – PiDO

+0

Является ли индекс индексированным «уникальным» режимом? Если он определен, тогда вы можете уловить исключение mysql, когда пытаетесь сохранить код, который иногда получает дубликат (как вы говорите). Как только исключение поймано, восстановите новый номер отслеживания и снова сохраните запись. –

+0

Похоже, я забыл сделать поле уникальным. Я постараюсь сделать это, как вы сказали. Спасибо! проголосуют за этот ответ. – PiDO