我有一个带有主键OrderGuid
的订单表。这是一个 32 位唯一标识符,系统的许多部分都使用它来跟踪订单。
不幸的是,这不是最好看的数据,因此我们决定需要一个 StoreOrderNumber
字段。这将是订单表中每个 StoreGuid
的唯一整数。它还需要自动递增,例如针对给定 StoreGuid
添加到表中的第一个订单的 StoreOrderNumber
为 1,接下来为 2,然后为 3,依此类推。针对特定 StoreGuid 的每个订单
将遵循与 StoreOrderNumber
相同的编号方式,即从 1 开始,然后是 2、3、4...
我完全不知道如何在 Laravel 和 MySQL 中做到这一点。有一个增量选项可以添加到表中的字段中,但这没有考虑到我们只需要为特定 StoreGuid
的每个新订单进行增量。
+-----------+-----------+------------------+
| OrderGuid | StoreGuid | StoreOrderNumber |
+-----------+-----------+------------------+
| aaa111 | abc123 | 1 |
| bbb222 | abc123 | 2 |
| ccc333 | xyz789 | 1 |
| ddd444 | xyz789 | 2 |
| eee555 | abc123 | 3 |
| fff666 | xyz789 | 3 |
+-----------+-----------+------------------+
最佳答案
您应该能够使用 MySQL TRIGGER
来执行此操作.
类似这样的东西(未经测试,但可以理解):
CREATE TRIGGER SetStoreOrderNumber BEFORE INSERT ON Orders
FOR EACH ROW BEGIN
SET NEW.StoreOrderNumber = (
SELECT (COALESCE(MAX(StoreOrderNumber), 0) + 1
FROM Orders
WHERE Orders.StoreGuid = NEW.StoreGuid
);
END
COALESCE
必须允许在新商店中创建第一个订单,因为 MAX(StoreOrderNumber)
将是NULL
.
关于mysql - Laravel/MySQL : Increment StoreOrderNumber based on StoreGuid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39447499/