我正在尝试根据从POST获取的值将新记录插入到我的表中。棘手的部分是,我需要根据我的值名称来填充外键ID。我确定我的值是有效的,问题出在语句上。
这是针对使用NPM(https://www.npmjs.com/package/mysql)的mysql程序包的Node.js应用程序。
我的专栏是idea.name,idea.short_description,idea.description,idea.difficulty和category_id。
我要执行的语句是““ INSERT INTO idea SET name =``,short_description ='',description =``,难易度='',category_id =(从类别WHERE名称=的SELECT ID)” / p>
选择部分是问题所在,因为我尝试附加默认数字(1),并且可以正常工作。
我必须处理以下mysql软件包:
db.query('INSERT INTO idea SET name = ?, short_description = ?, description = ?, difficulty = ?, category_id = 1', [name, short_description, description, difficulty, category_id], (err, result) => {
if (err) throw err
cb(result)
})
我想要看起来像这样的东西:
db.query('INSERT INTO idea SET name = ?, short_description = ?, description = ?, difficulty = ?, category = (SELECT id FROM category WHERE name = ' + category ')', [name, short_description, description, difficulty, category], (err, result) => {
if (err) throw err
cb(result)
})
由于我的外键名称,我希望得到我的外键ID。所以我尝试用category.name查找category.id。
谢谢!
答案 0 :(得分:2)
似乎您的问题是您想在执行INSERT
时运行子查询。这是我在您的代码中看到的:
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = (
SELECT id
FROM category
WHERE name = ?
)
那么为什么不将INSERT+SELECT
分为两个步骤,首先是SELECT
,然后是INSERT
使用这种方法,您将需要两个查询:
SELECT
SELECT id
FROM category
WHERE name = ?
INSERT
INSERT INTO idea
SET name = ?
, short_description = ?
, description = ?
, difficulty = ?
, category = ?
还有一个很好的副作用,就是您有一个地方可以确定在未找到类别ID时会发生什么。