首先,我必须说我完全是NodeJS技术的新手。 但是,我尝试做一些尝试来学习它。
这是问题所在: 我有3个表(PARTICIPANT,ADDRESS_PARTICIPANT和INSCRIPTION)。
ADDRESS_PARTICIPANT包含参与者ID(这是参与者的地址)。
INSCRIPTION包含参与者ID
因此,要存储题字行,首先需要保存PARTICIPANT和ADDRESS_PARTICIPANT。只有在此之后,我才能插入INSCRIPTION
我正在按照自己的学习方式来做,但是我认为有很多嵌套的ifs。
如何改进此代码?有人用Promise告诉我,我会很好..但我不知道。有人可以帮我吗?谢谢
这是代码:
this.save = function(data, retur) {
var con = db();
const SQL_INSERT_PARTICIPANT =
`INSERT INTO participant (nome_completo, tipo_funcionario, data_nascimento, sexo, unidade, cpf, email, telefone, telefone_emergencia) VALUES( ? )` ;
const SQL_INSERT_ADDRESS_PARTICIPANT =
`INSERT INTO endereco_participante (participant_id, cep, estado, cidade, bairro, endereco, numero) values( ? )`;
const SQL_INSERT_INSCRIPTIONS = `......`
var values = [
data.nome_completo, data.tipo_funcionario, new Date(dateToEN(data.data_nascimento)), data.sexo, data.unidade, data.cpf_funcionario, data.email, data.telefone, data.telefone_emergencia
]
const insertParticipante = con.query(SQL_INSERT_PARTICIPANT , [values], function (err, result) {
if (err) throw err;
var values_end = [
result.insertId, data.cep, data.estado, data.cidade, data.bairro, data.endereco, data.numero
]
if (result.affectedRows > 0 ) {
const insertEndPart = con.query(SQL_INSERT_ADDRESS_PARTICIPANT , [values_end], function(err, result2 ) {
if (err) throw err;
console.log('Number of records inserted in ADDRESS_PARTICIPANT table: ' + result2.affectedRows);
console.log('insertId.: ' + result2.insertId)
if (result.affectedRows > 0 ) {
const insertInscricao = con.query(SQL_INSERT_INSCRIPTIONS, [values_ins], function(err, result3) {
console.log(`Inscription recorded! id: `+resul3.insertId)
})
}
})
}
})
}
答案 0 :(得分:1)
您可以使用MySQL的LAST_INSERT_ID
,我假设每个表都有一个带有auto_increment选项的主键列。
不带参数的LAST_INSERT_ID()返回BIGINT UNSIGNED(64位) 代表第一个自动生成的值的值 由于以下原因,已成功为AUTO_INCREMENT列插入 最近执行的INSERT语句。 LAST_INSERT_ID()的值 如果没有成功插入任何行,则保持不变。
https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_last-insert-id
然后您可以在NodeJS中使用这些INSERT
。
INSERT INTO participant (nome_completo, tipo_funcionario, data_nascimento, sexo, unidade, cpf, email, telefone, telefone_emergencia) VALUES( <other columns> )
下面的插入内容将使用LAST_INSERT_ID()
来获取参与者。
INSERT INTO endereco_participante (participant_id, cep, estado, cidade, bairro, endereco, numero) values( LAST_INSERT_ID(), <other columns> )
有了三个表,问题变得更加复杂。
然后,您可以使用MySQL的用户变量。
INSERT INTO participant (nome_completo, tipo_funcionario, data_nascimento, sexo, unidade, cpf, email, telefone, telefone_emergencia) VALUES( <other columns> )
SET @participant_id = LAST_INSERT_ID();
INSERT INTO endereco_participante (participant_id, cep, estado, cidade, bairro, endereco, numero) values( @participant_id, <other columns> )
SET @endereco_participante_id = LAST_INSERT_ID();
然后,您可以在第三个插入查询中使用@participant_id和@endereco_participante_id。 (您在问题中未提供的接缝)。
请注意,SET查询是分开的查询,因此您还需要使用con.query('SET @participant_id = LAST_INSERT_ID();', ..)