如何根据以前的列值更新 sql 列
How to update sql column based on previous column values
我有一个 table,它的列是 id(int)、order_id(int)、partner_id(int)
现在我想在 partner_id 的基础上递增 order_id ,
例如
对于合作伙伴 1,order_id 是 1,2,3
那么如果合作伙伴 2 正在下订单,order_ids 应该再次从 1 而不是从 4 开始。
在 mysql 中最好的方法是什么?每次我想创建新订单时,我是否应该从数据库中读取特定合作伙伴的最后订单 ID?
我正在使用 mysql 和 sequelize
在与我的情况类似的情况下,我首先在订单 table 上创建了一个名为 order_number
的列。
然后创建一个 mysql function
以根据函数的参数和顺序 table 获得预期的 order_number
。
然后在插入时我用适当的参数调用了 mysql 函数。
下面是 mysql 函数在我的例子中的样子:
正在创建函数:
DELIMITER $$
CREATE FUNCTION `get_order_number`(partner_id VARCHAR(255)) RETURNS int(10)
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(id)
FROM order_table
WHERE `partner_id` = partner_id
) + 1;
RETURN getCount;
END$$
DELIMITER ;
.
.
实施:
INSERT INTO (
id,
order_id,
pertner_id
) VALUES (
NULL,
get_order_number(10), -- 10 is partner_id
10 -- 10 is partner_id
);
.
.
函数说明
第 1 遍 partner_id
作为函数的参数。
我在函数中的第 2 个创建了一个 select
查询以获取该合作伙伴创建的订单数量。
最后将返回的数字加一 (1) 以获得最后一个值。
.
.
声明:
我已经使用这个功能 3 年多了,还没有遇到任何问题。但是这个函数有一个弱点:当我同时在两个 form/page 中同时提交表单时(以毫秒为单位),我得到了同时调用相同函数的死锁错误错误。由于我有中等用户,所以我在现实生活中还没有遇到过这个错误。
我在带有节点 js 的纯 mysql 驱动程序中使用此功能,尚未使用 sequelize 进行测试。
希望对您有所帮助。
我有一个 table,它的列是 id(int)、order_id(int)、partner_id(int)
现在我想在 partner_id 的基础上递增 order_id , 例如 对于合作伙伴 1,order_id 是 1,2,3 那么如果合作伙伴 2 正在下订单,order_ids 应该再次从 1 而不是从 4 开始。
在 mysql 中最好的方法是什么?每次我想创建新订单时,我是否应该从数据库中读取特定合作伙伴的最后订单 ID?
我正在使用 mysql 和 sequelize
在与我的情况类似的情况下,我首先在订单 table 上创建了一个名为 order_number
的列。
然后创建一个 mysql function
以根据函数的参数和顺序 table 获得预期的 order_number
。
然后在插入时我用适当的参数调用了 mysql 函数。
下面是 mysql 函数在我的例子中的样子:
正在创建函数:
DELIMITER $$
CREATE FUNCTION `get_order_number`(partner_id VARCHAR(255)) RETURNS int(10)
BEGIN
DECLARE getCount INT(10);
SET getCount = (
SELECT COUNT(id)
FROM order_table
WHERE `partner_id` = partner_id
) + 1;
RETURN getCount;
END$$
DELIMITER ;
.
.
实施:
INSERT INTO (
id,
order_id,
pertner_id
) VALUES (
NULL,
get_order_number(10), -- 10 is partner_id
10 -- 10 is partner_id
);
.
.
函数说明
第 1 遍 partner_id
作为函数的参数。
我在函数中的第 2 个创建了一个 select
查询以获取该合作伙伴创建的订单数量。
最后将返回的数字加一 (1) 以获得最后一个值。
.
.
声明:
我已经使用这个功能 3 年多了,还没有遇到任何问题。但是这个函数有一个弱点:当我同时在两个 form/page 中同时提交表单时(以毫秒为单位),我得到了同时调用相同函数的死锁错误错误。由于我有中等用户,所以我在现实生活中还没有遇到过这个错误。
我在带有节点 js 的纯 mysql 驱动程序中使用此功能,尚未使用 sequelize 进行测试。
希望对您有所帮助。