我正在编写一个应用程序,让用户发布内容(称为“时刻”)以及与该内容关联的一个或多个标签。

我有一个3表数据模型(在MySQL中)如下所示:


表格:MOMENTS,列:MOMENT_ID,USER_ID,TITLE,CREATE_DATE
表格:TAGS,列:TAG_ID,TITLE,CREATE_DATE
表格:MOMENTS_TAGS,列:MOMENT_ID,TAG_ID


为以下内容设置了自动递增:MOMENT_ID和TAG_ID

我要解决的问题(在NodeJS中)是:如何插入新帖子(在MOMENT表中)和1个或多个标签(在TAGS表中),获取其各自的ID并在连接表中进行第3次插入(MOMENT_TAGS)?

我已经尝试通过执行3个连续的查询来解决此问题(使用mysqljs),先执行3个MOMENTS,然后是TAGS,然后是MOMENTS_TAGS,但是它失败了,因为尽管第一个result1.insertId返回正确的数字,但是第二个result2.insertId却没有似乎从TAGS表中返回了正确的数字,而只是简单地增加了第一个result1.insertId。

到目前为止,这是我的代码(我想首先使它适用于1个标签):

app.post('/api/post/complex', function(req,res) {

  pool.getConnection(function(err, connection) {

    var preppedQuery1 = "INSERT INTO MOMENTS (USER_ID, TITLE, CREATE_DATE) VALUES ('[email protected]','test moment title','2016-08-08')";
    connection.query(preppedQuery1, function(err1, result1) {

      if (err1) {
        res.send('ERROR');
        connection.release();
      }
      else {

        var preppedQuery2 = "INSERT INTO TAGS (TITLE, CREATE_DATE,USER_ID) VALUES ('TEST TAG', '2016-09-08','[email protected]')";
        connection.query(preppedQuery1, function(err2, result2) {

        if (err2) {
          res.send('ERROR');
          connection.release();
        }
        else {

          var preppedQuery3 = "INSERT INTO MOMENTS_TAGS (MOMENT_ID, TAG_ID) VALUES (" + result1.insertId + "," + result2.insertId + ")";
          //At this point if result.insertId is 100, result2.insertId is always 101 instead of coming from the TAGS table
          //Why isn't result2.insertId the auto-incremented number from the TAGS table insert?

connection.query(preppedQuery3, function(err3, result3) {

            if (err3) {
              res.send('ERROR');
              connection.release();
            }
            else {
              console.log(result3); //not really needed
              res.send('OK'); //everything worked
              connection.release();

            }

          });

        }

        });

      }

    });

  });

});

最佳答案

您好像两次运行preppedQuery1

错字在这里:



(假设这不仅是帖子中的错字,而且实际上还存在于您的来源中……)

07-24 19:03