如何使用节点js上的一对多关系表从mysql查询js创建json结果?
我被SQL关系困住了。我已经搜索这个解决方案3-4个小时了,但进展甚微。我有两个表,我想在其中创建一对多关系,我想创建一个用户爱好API。如何使用节点js上的一对多关系表从mysql查询js创建json结果?,mysql,node.js,express,postman,Mysql,Node.js,Express,Postman,我被SQL关系困住了。我已经搜索这个解决方案3-4个小时了,但进展甚微。我有两个表,我想在其中创建一对多关系,我想创建一个用户爱好API。 tb_用户 tb_skill id处的外键\u用户 +----------+--------------+---------------+--------------------+ | id_skill | id_user(FK) | skill | level | +----------+------------
tb_用户 tb_skill id处的外键\u用户
+----------+--------------+---------------+--------------------+
| id_skill | id_user(FK) | skill | level |
+----------+--------------+---------------+--------------------+
| 1 | 1 | Drawing | Intermediate |
| 2 | 1 | Coding | Beginner |
| 3 | 1 | Photoshop | Intermediate |
| 4 | 2 | Basketball | Amateur |
+----------+--------------+---------------+--------------------+
我想创建一个用户API,用JSON返回他们的姓名和技能。这是我的密码
app.get('/user',(req,res)=>{
let sql1 = "SELECT * FROM tb_user";
conn.query(sql1,(err,result1)=>{
if (err) throw err;
else{
for(var i = 0;i<result1.length;i++){
let sql2 = "SELECT skill,level FROM tb_skill WHERE tb_skill.id_user='"+result1[i].id_user+"'";
conn.query(sql2,(err,result2)=>{
if(err) throw err
else{
result1[i].skills=result2;
}
});
}
var data = {
'status' : 200,
'data' : result1
};
res.json(data);
res.end;
}
});
});
您正在for循环中调用异步回调函数,这就是为什么您没有得到结果。有很多方法可以做到这一点,但我只是想帮助您修复代码。您可以尝试以下代码:
app.get('/user',(req,res)=>{
sql1 = "SELECT * FROM tb_user";
conn.query(sql1,(err,result1)=>{
if (err) throw err;
else{
for(var i = 0;i<result1.length;i++){
( (pos ) => {
let sql2 = "SELECT skill,level FROM tb_skill WHERE tb_skill.id_user='"+result1[pos].id_user+"'";
conn.query(sql2,(err,result2)=>{
if(err) throw err
else{
result1[pos].skills=result2;
}
});
} ) (i );
}
var data = {
'status' : 200,
'data' : result1
};
res.json(data);
}
}
})
app.get('/user',(req,res)=>{
sql1=“从tb\U用户中选择*;
conn.query(sql1,(err,result1)=>{
如果(错误)抛出错误;
否则{
对于(var i=0;i{
让sql2=“从tb_技能中选择技能,级别,其中tb_技能.id_用户=”+result1[pos].id_用户+”;
conn.query(sql2,(err,result2)=>{
如果(错误)抛出错误
否则{
结果1[pos]。技能=结果2;
}
});
})(i);
}
风险值数据={
“状态”:200,
“数据”:结果1
};
res.json(数据);
}
}
})
NB:使用,它将为您提供非常简单和准确的结果
{
"status": 200,
"data": [
{
"id_user": 1,
"name": "Irsyad Abdul",
"skills": [
{
"skill": "Drawing",
"level": "Intermediate"
},
{
"skill": "Coding",
"level": "Beginner"
},
{
"skill": "Photoshop",
"level": "Intermediate"
}
]
},
{
"id_user": 2,
"name": "Abdul Hamid",
"skills": [
{
"skill": "Basketball",
"level": "Amateur"
}
]
},
{
"id_user": 3,
"name": "Darussalam",
"skills": []
}
]
}
app.get('/user',(req,res)=>{
sql1 = "SELECT * FROM tb_user";
conn.query(sql1,(err,result1)=>{
if (err) throw err;
else{
for(var i = 0;i<result1.length;i++){
( (pos ) => {
let sql2 = "SELECT skill,level FROM tb_skill WHERE tb_skill.id_user='"+result1[pos].id_user+"'";
conn.query(sql2,(err,result2)=>{
if(err) throw err
else{
result1[pos].skills=result2;
}
});
} ) (i );
}
var data = {
'status' : 200,
'data' : result1
};
res.json(data);
}
}
})