MySQL 使用 from select 语句插入行,同时递增用户可定义的顺序

标签 mysql

我在这里所做的是将报价转换为采购订单,这只是我用来执行此操作的查询之一。 router的主键是RN,该表中的唯一键是Line Order。我使用Line Order 来允许用户定义router 中的行顺序。由于 RN 设置为 auto_increment 我不必担心这一点。问题是行顺序路由器上。我从 rfq_operations 选择多行插入到 router 中,但它为所有行提供了相同的 Line Order 值,我需要它们增加 1来自 MAX(router.Line Order)

INSERT INTO `router`(`Work Order`, `Line Order`, `Estimated Time`,`Estimated Time Unit`, `Work Center`, `Work Description`, `Work Instruction`)
SELECT ?,(SELECT 1+IFNULL(MAX(`Line Order`),1) FROM `router`),CEIL(((`rfq_operations`.`Program Time`+`rfq_operations`.`Setup Time`+(`rfq_operations`.`Run Time`*(?/`rfq_operations`.`Conversion`)))/60))
    ,'Hours',`rfq_operations`.`Work Center`,`workcenter`.`Information`,`rfq_operations`.`Instructions`
FROM `rfq_operations`
LEFT JOIN `workcenter`
ON `rfq_operations`.`Work Center`=`workcenter`.`RN`
WHERE `rfq_operations`.`RFQ Line`=?
ORDER BY `rfq_operations`.`Line Order`

最佳答案

运行select查询,然后将结果插入到最终表中。所以,你只能得到一个值。在选择期间您看不到表格的更改。

无论如何,您都可以使用变量做您想做的事情。您的查询有点复杂,但想法如下:

insert into router(col1, . . .)
    select (@rn := @rn + 1), . . .
    from . . . cross join
         (select @rn := coalesce(max(`Line Order`), 0) from router) vars;

这会将@rn变量初始化为最大值。然后它为子查询中的每一行递增它。

也就是说,正确的做法是为此设置一个自动递增键。只需将Line Order定义为自动递增主键,数据库就会为您递增值。

关于MySQL 使用 from select 语句插入行,同时递增用户可定义的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157153/

相关文章:

MySQL服务器访问

php - 基于两列对 MySql 结果进行排序并使用分页显示结果的最佳方法?

mysql - 将所有 mysql 表从 latin1_swedish_ci 切换到 utf8_unicode_ci 时会有影响吗?

php - 导出csv时如何从列内容中转义分隔符

php - 无法向mysql插入数据但没有显示错误消息

php - MySQL Wrapper 和获取行

mysql - 使用 REGEX 代替 BETWEEN 运算符进行 SQL 搜索

mysql - 如何通过聚合和标志来编写?

PHP PDO : SQLSTATE[HY000] [2002] Connection refused

php - 用户手册(seo + 自动生成)