自增 ID 刪除後會產生空洞,本文提供演算法找出最小可用 ID 以重複利用。
$no。$no-1,若某 ID 不存在則為最小可用 ID。$no 皆存在,回傳 $no+1。$model = new Message();
if ($model->count() == 0) { $no = 1; }
else {
$connection = Yii::app()->db;
$sql = "select max(id) from {{Message}}";
$command = $connection->createCommand($sql);
$result = $command->queryAll();
foreach ($result[0] as $key => $val) { $no = (int)$val; }
if ($no == 1) { $no = 2; }
else {
for ($i = 1; $i < $no; $i++) {
$info = $model->findByPk($i);
if (count($info) == 0) { $no = $i; break; }
else { $no = $no + 1; }
}
}
}
// $no 即為最小可用 ID
大量資料時逐筆 findByPk 效能較差,建議一次撈取所有現有 ID 陣列,在記憶體中運算差集。