我在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框架。我已经阅读了很多问题和文章,但对我来说没什么用,
答案 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')));
。