我正在撰写一个应用程序,让用户发布内容(称为"时刻")以及与该内容相关联的一个或多个标签。
我有一个3表数据模型(在MySQL中),如下所示:
自动增量设置为:MOMENT_ID和TAG_ID
我尝试解决的问题(在NodeJS中)是:如何插入新帖子(在MOMENT表中)和1个或多个标签(在TAGS表中),获取各自的ID&# 39;并在连接表中进行第3次插入(MOMENT_TAGS)?
我已经尝试通过执行3次连续查询(首先是MOMENTS,然后是TAGS,然后是MOMENTS_TAGS)来解决此问题(使用mysqljs),但它失败了,因为尽管第一个result1.insertId返回正确的数字,但第二个结果2 .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 ('justatest@gmail.com','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','justatest@gmail.com')";
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();
}
});
}
});
}
});
});
});
答案 0 :(得分:0)
答案 1 :(得分:0)
已解决:第二个preppedQuery中的拼写错误(再次使用1,而不是2)。
正在分配测试的内容和正确的insertId。