首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii 取得資料表最小可用 ID 算法

     編輯:PHP 綜合知識

自增 ID 刪除後會產生空洞,本文提供演算法找出最小可用 ID 以重複利用。

演算法邏輯

  1. 資料表為空 → 回傳 1。
  2. 取得最大 ID $no。
  3. 遍歷 1 到 $no-1,若某 ID 不存在則為最小可用 ID。
  4. 若 1~$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 陣列,在記憶體中運算差集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved