【问题标题】:Wrong incrementation Nodejs & MySQL while looping an array for bulk insert循环数组以进行批量插入时错误的增量Nodejs和MySQL
【发布时间】:2017-06-10 08:13:24
【问题描述】:

这非常奇怪。代码有点 500 行检查,但总结起来就是这样

我用的是 lodash,没关系

var data = API.data
_.forEach(data, function (member, index, array) {
     var todoArray = []
     var todoNum = 0
     _.forEach(member.todos, function (spell, index, array) {
          .. bla bla bla
          todoArray.push([
              ...stuff,
              todoNum
          ])
          todoNum++
     })
     i.connection.query('INSERT INTO `static_todos` (`key`, `name`, `description`..) VALUES ? ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)...;', [todoArray], function (err, result, fields) {
          // Throw stuff
     })
})

但是当我进入数据库时​​,行和todoNum 都被打乱了。我不知道发生了什么..

编辑;当我在第二个 forEach 显示 todoArray 之后打印日志时,它显示正确的数字和正确的顺序。

【问题讨论】:

  • 您的架构是什么样的? MySQL 没有义务以任何特定顺序返回内容,除非您有 ORDER BY 子句。
  • 天哪 .. 对不起,我是个白痴,有这个按钮吗.. 批量插入后数字很好,在我将查询放入循环之前它们很乱.我应该删除问题吗?
  • 呵呵,解决问题不丢人。您可以随时删除问题,或提供相关答案以解释解决方案。

标签: mysql node.js loops increment


【解决方案1】:

我的application 也遇到过此类问题。

不要期望任何集合中的任何顺序。如果你想要一个特定的顺序,添加一个整数值,你可以排序以获得你需要的顺序。

所以我已经解决了使用额外的列进行手动订购,在我的情况下检查screenshot

关系中没有顺序(即人们通常错误地称为“表”),因为关系是一个集合,而不是列表或数组。

【讨论】:

  • 这与批量插入后屏幕上的内容相同,我什至没有想过按 num 排序(它是按第一列排序的,这是一个字符串主键)我只是认为它仍然是错误的..我真的需要一只橡皮鸭,不要再用这个来打扰stackoverflow最好的了..
  • 当您按列名 ASC 获取然后获取顺序时,它将按顺序为您提供数据
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2021-05-25
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多