我自己选择在Mysql数据库表中自动增加

时间:2017-06-16 09:58:54

标签: php mysql

我在mysql数据库中有以下名为oder的表

         id    user_id   item_id 
         1       55      5813    
         2       55      359     
         3       56      559  
         4       62      4536    
         5       62      484     
         6       99      4698    
         7       29      435

在此表中," id" 是主键,此列上的自动增量已启用。现在我想添加一个列,它也应该自动递增,值类似于 OD-001 OD-002 。 然后我的表应该看起来像

         id    user_id   item_id  order_custom_id
         1       55      5813     OD-001
         2       55      359      OD-002
         3       56      559      OD-003
         4       62      4536     OD-004
         5       62      484      0D-005
         6       99      4698     OD-006
         7       29      435      OD-007

注意:我目前正在开发PHP Laravel框架。我已经阅读了很多问题和文章,但对我来说没什么用,

3 个答案:

答案 0 :(得分:1)

如果想通过php执行此操作,您将此表格作为模型,并且order_custom_id始终以id结尾,您可以使用laravel事件并通过获取表格的最后一个ID来创建它+ 1.

public static function boot()
{
    parent::boot(); // Validate the model
    static::creating(function ($your_model) {
        $prev_model = YourModel::orderBy('id', 'desc')->first();
        $id = ($prev_model) ? ($prev_model->id +1) : 1;
        $your_model->order_custom_id = sprintf('OD-%s', str_pad($id, 3, "0", STR_PAD_LEFT));
    });
}

答案 1 :(得分:1)

如果我理解正确,您希望根据自动增量列值生成列值(例如1 - > OD-001)。

我想到的第一个想法是使用auto computed columns。不幸的是,MySQL does not seem to support this feature.(它与内部生成自动递增和自动计算列值的方式有关):

  

生成的列' computed_col'不能参考自动增量列。

另一种方法是使用触发器来更新插入的另一列,但我个人尽可能避免使用触发器,因此使用视图可能是一个不错的解决方案:

CREATE VIEW orderView AS
SELECT id, user_id, item_id, CONCAT('OD-', LPAD(id, 3, '0')))
FROM order 

我看到的唯一缺点是值不会持久存在并且是动态计算的(更多CPU)。但是,对于相当少量的选定行(<千),这应该可以正常工作。

注意:使用视图而不是单独的列也遵循3NF

答案 2 :(得分:0)

您可以尝试以下方式:

<div class="img__wrap">
  <a href="myHomePage.html" style="text-decoration:none;">
    <img src="http://www.dogbreedplus.com/dog_names/images/puppy-dog-names.jpg" alt="hover box is supposed to encapsulate picture" class="picture">
    <p class="img__description">
      This is where the hover box should pop up explaining the picture it should flow from title and cover the box.
    </p>
    <h1 class="pictureTitle">Title </h1>

  </a>

</div>

这将从您的表格中选择下一个增量ID,并将其添加到带有前导零的INSERT INTO table (user_id, item_id) VALUES (20, CONCAT('OD-', LPAD((SELECT ISNULL(MAX(id) + 1, 1) FROM table), 3, '0')));