mysql - Laravel/MySQL : Increment StoreOrderNumber based on StoreGuid

标签 mysql sql laravel laravel-5

我有一个带有主键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/

相关文章:

php - Laravel 中的 session flash 消息超时

jquery - 如何在登录尝试失败后保持打开的模式登录表单

mysql - INSTR SQL 中的\n

sql - 无法在 PL/SQL 中运行 hello world

php - 添加 1 行计数器并使用 php 中的 fputcsv 首先更改最后一个 header

php - UTF-8贯穿始终

php - 如何查找两个 Mysql 表之间的缺失值

laravel - Vagrant Up VT-X 不可用

MySQL基于带分隔符的子字符串选择带有LIKE或REGEX的列字符串

php - GROUP_CONCAT 允许的最大长度?如何通过呢?