emlog gid自增断号时自动插入
[ 2017/03/19, Emlog , 3287阅, 0评 ]

emlog文章连接使用gid自增号作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。

其实断号问题解决很方便,只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。

我这里的解决方法是这样的,我把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。

找到我们的addlog添加文章和页面函数。路径在include/model/log_model.php。

原始代码:

/**
 * 添加文章、页面
 *
 * @param array $logData
 * @return int
 */
function addlog($logData) {
    $kItem = array();
    $dItem = array();
    foreach ($logData as $key => $data) {
        $kItem[] = $key;
        $dItem[] = $data;
    }
    $field = implode(',', $kItem);
    $values = "'" . implode("','", $dItem) . "'";
    $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    $logid = $this->db->insert_id();
    return $logid;
}

修改为:

function addlog($logData) {
    $kItem = array();
    $dItem = array();
    foreach ($logData as $key => $data) {
        $kItem[] = $key;
        $dItem[] = $data;
    }
    $field = implode(',', $kItem);
    $values = "'" . implode("','", $dItem) . "'";
    //gid自增断号自动插入↓
    $gidarr[0]='0';
    $res = $this->db->query("SELECT gid From  " . DB_PREFIX . "blog ORDER BY gid ASC");
    while ($row = $this->db->fetch_array($res)) {
        $gidarr[] = $row['gid'];
    }
    foreach($gidarr as $key=>$val){
        if($key!=$val){
            $field = 'gid,'.$field;
            $values = "'".$key."',".$values;
            break;
        }
    }
    //gid自增断号自动插入↑
    $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    $logid = $this->db->insert_id();
    return $logid;
}

通过改变是否需要插入语句添加gid和gid值,来自增或者插入。

假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。

转载自(http://www.myxzy.com/post-26.html)

有朋自远方来...评论一下呗O(∩_∩)O