当前位置: 首页 > 知识库问答 >
问题:

多个插入node.js

胡元明
2023-03-14

我是Node.js的新手,我在我的sql数据库2表中,一张叫做俱乐部的桌子和一张叫做球员的桌子,它们通过一对多的关系联系在一起,所以我在Flutter中创建了一个post查询,从我的查询中我想发送俱乐部的名字,俱乐部的价格将他们插入到第一个表中,并且在同一个查询中发送该队的选定球员列表,并做一个循环将他们插入到第二个表中,并为每个球员插入俱乐部的id,但是我发现我自己不知道我应该在Flutter或node.js中正确地操作什么,我正在尝试为我所尝试的东西找到正确的语法,在执行之后我在node.js中出现了一个错误,它说

json输入意外结束,原因可能是玩家(这是一张桌子,而不是table club中的一个字段)

这里我尝试了:

create:(data,callback)=>{
    pool.query(
      insert into club(userid,name,price) values(?,?,?),

      [
        data.userid,
        data.name,
        data.price,

      ],
      (error,results,fields)=>{
        if(error){
          callback(error);
        }
        return callback(null,results);
      }
    );
    for(item in data.players){
    pool.query(

      `insert into players(id,firstname,lastname,position,price,appearences,goals,
        assists,cleansheets,redcards,yellowcards,image,clubid) values(?,?,?,?,?,?,?,?,?,?,?,?,?)`,

      [
        data.players.id,
        data.players.firstname,
        data.players.lastname,
        data.players.position,
        data.players.price,
        data.players.appearences,
        data.players.goals,
        data.players.assists,
        data.players.cleansheets,
        data.players.redcards,
        data.players.yellowcards,
        data.players.image,
        data.players.clubid,
        

      ],
      (error,results,fields)=>{
        if(error){
          callback(error);
        }
        return callback(null,results);
      }
    );
  }
  },

以下是我的数据库的外观:

table Club:id userid

表球员:id第一名最后一名位置价格出场进球助攻干净床单红牌黄牌图像clubid

clubid是表club的外键,我知道它应该是最后插入的id,但我不知道如何使用正确的语法

如有任何帮助,我将不胜感激

共有1个答案

孙佐
2023-03-14

这里有两个问题。

首先,第二次插入时要使用的唯一clubid我想是由MySQL的autoincrement特性在第一次插入时生成的。您可以从result.insertiD中的查询回调中获取它。然后将其传递给第二个查询。

其次,您在这里没有正确处理MySQL查询的异步性质。在知道第一次插入完成之前,无法执行第二次插入。因此,必须从第一个查询的回调内部进行第二次插入。

或者更好地使用mysql2包和async/await。类似这样的东西(未调试)。

create: async (data,callback) => {                               /* async!   */
    const myPool = pool.promise()                                /* promise! */
    const {results, fields} = await myPool.query(                /* await!   */
            'insert into club(userid,name,price) values(?,?,?)',
            [ data.userid, data.name, data.price] )
    const clubid = results.insertId
    for(item in data.players) {
        const {results, fields} = await myPool.query(            /* await!   */
           `insert into players
               (id, firstname, lastname, position, 
                price, appearences, goals, assists, 
                 cleansheets, redcards, yellowcards, 
                 image, clubid)
              values(?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
            [   /* NOTE use   item.whatever   not   data.players.whatever,
                 * because data.players is an array of objects  */
                item.id, item.firstname, item.lastname, item.position, 
                item.price, item.appearences, item.goals, item.assists,
                item.cleansheets, item.redcards, item.yellowcards,
                item.image,
                clubid ]   /* NOTE not item.clubid ! */
               )
       } /* end for (item in data.players) */
    }
}

专业提示:花每一秒钟的时间来弄清楚Async/Await和相关的PromissionAPI是值得的。如果你不这样做,你就会陷入所谓的“回拨地狱”。它上面有一个牌子,上面写着“你们进入这里的人,要放弃一切希望。”

 类似资料:
  • 我是Vaadin和Java的新手,我正在处理以下问题: 在下面的代码中,我想在ArrayList“newList”中添加多个元素。如你所见,名为“ps”的元素有5个子元素。 问题是,在ArrayList中添加的当前(循环中的)元素替换了每个索引中所有先前的元素,结果它最终只返回最后一个“ps”元素,循环发生的次数是多少。 和代码:

  • 问题内容: 是否可以使用一个insert语句在一个表中插入多行?我知道如果发生以下情况,将会发生这种情况: 但是,如果我想插入: 只需一个插入命令? 问题答案: 两种解决方案(来源:http : //appsfr.free.fr/spip.php?article21): 或者

  • 问题内容: 嘿,我有一个连接两个不相关表的Junction表。两个表都有。我需要使用不同的值从每个表中选择,例如,这就是我的看法: 我见过的所有示例都使用一条语句,但是两个表具有相同的值,在这种情况下,它们不是。 问题答案: 试试这个查询:

  • 问题内容: 我从网络以以下格式下载了800条语句: 我听说过事务,s和使用,但是我不知道哪种情况更适合这种情况。 截断后将它们插入sqlite数据库的最佳方法是什么? 问题答案: 如果要运行多个查询,则为了提高数据完整性和性能,应该使用事务。这是一个代码,可让您了解如何执行此操作:

  • 问题内容: 我正在尝试使用Linq / EntityFramework将数据从C#应用程序保存到数据库中。插入到一个表很简单,但是我不确定如何将数据插入到三个都与自动增量标识互连的表中?这是一个小问题,所以我使用一个线程及其所有帖子- 每个 ThreadTitle 和每个 Post 都与一个 User (不是实际的表名)相关联。 我的设计思想是将完整线程刮入内存,然后进行“批量”插入。为了减少负载

  • 问题内容: 使用PDO运行以下查询(实际上,我使用准备好的语句,但存在相同的问题) 如何获得有关和的记录的ID ? 从字面上返回最后一个ID。 采取这个最后的ID,减去记录数并假定范围覆盖了我的所有记录,是否足够?会有差距/跳跃。是否保证此查询是原子查询? 问题答案: 如果您使用的是MyISAM表,则由于表级别的锁定机制,您只能获得一定范围的ID。 阅读http://dev.mysql.com/d