Мое решение, реализованная в CakePHP 2.4.7, чтобы создать таблицу с полем типа один auto_incremental
CREATE TABLE `unique_counters` (
`counter` int(11) NOT NULL AUTO_INCREMENT,
`field` int(11) NOT NULL,
PRIMARY KEY (`counter`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Затем я создал функцию PHP, чтобы каждый раз вставить новую запись, чтение сгенерированный идентификатор и немедленно удалить его. Mysql сохраняет статус своего счетчика памяти. Все числа, сгенерированные являются уникальными, пока вы не сбросите счетчик MySQL или запустить операцию TRUNCATE TABLE
находку ниже модели, созданной в CakePHP, чтобы реализовать все
App::uses('AppModel', 'Model');
/**
* UniqueCounter Model
*
*/
class UniqueCounter extends AppModel {
/**
* Primary key field
*
* @var string
*/
public $primaryKey = 'counter';
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'counter' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
);
public function get_unique_counter(){
$data=array();
$data['UniqueCounter']['counter']=0;
$data['UniqueCounter']['field']=1;
if($this->save($data)){
$new_id=$this->getLastInsertID();
$this->delete($new_id);
return($new_id);
}
return(-1);
}
}
Любые проверки на диапазон принадлежности результата могут быть реализованы в одной и той же функции, манипулируя полученным результатом.
уникальным по отношению к? – jball 2010-12-07 22:17:33
уникально к чему, другие записи в таблице? – 2010-12-07 22:17:45
уникально для столбца таблицы – hippout 2010-12-07 22:18:31