Reorder / reset auto increment primary key

后端 未结 15 1435
北荒
北荒 2020-11-22 04:39

I have a MySQL table with an auto increment primary key. I deleted some rows in the middle of the table. Now I have, for example, something like this in the ID column: 12, 1

15条回答
  •  故里飘歌
    2020-11-22 05:08

    My opinion is to create a new column called row_order. then reorder that column. I'm not accepting the changes to the primary key. As an example, if the order column is banner_position, I have done something like this, This is for deleting, updating, creating of banner position column. Call this function reorder them respectively.

    public function updatePositions(){
        $offers = Offer::select('banner_position')->orderBy('banner_position')->get();
        $offersCount = Offer::max('banner_position');
        $range = range(1, $offersCount);
    
        $existingBannerPositions = [];
        foreach($offers as $offer){
            $existingBannerPositions[] = $offer->banner_position;
        }
        sort($existingBannerPositions);
        foreach($existingBannerPositions as $key => $position){
            $numbersLessThanPosition = range(1,$position);
            $freshNumbersLessThanPosition = array_diff($numbersLessThanPosition, $existingBannerPositions);
            if(count($freshNumbersLessThanPosition)>0) {
                $existingBannerPositions[$key] = current($freshNumbersLessThanPosition);
                Offer::where('banner_position',$position)->update(array('banner_position'=> current($freshNumbersLessThanPosition)));
            }
        }
    }
    

提交回复
热议问题