我正在编写一个应用程序,让用户发布内容(称为“时刻”)以及与该内容关联的一个或多个标签。
我有一个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
。
错字在这里:
(假设这不仅是帖子中的错字,而且实际上还存在于您的来源中……)