首先,我得告诉你我在这个“宇宙”里是个绝无仅有的傻瓜。我正在使用:expressjs、mysql、body parser、express session、ejs模板在node中创建一个基本的contacts应用程序。
我的数据库由3个表组成:
用户(用户名、名、名、用户名、密码)
联系人(ct\ U id,名字,第二个名字,电话号码。)
用户\联系人(user\ id,ct\ id)-->用户和联系人的外键
我想在/myprofile页面上列出有关用户及其联系人的所有详细信息。我不知道如何处理select查询。
所以,在一些文档之后,我做了以下工作:
conn.query('SELECT * FROM user_contacts WHERE user_id= ?', req.session.user_id, function (err, result) {
if(err) throw err;
console.log(result);
var queryArray = "";
for(var i = 0; i < result.length; i++){
queryArray += `SELECT * FROM contacts WHERE ct_id= ${result[i].ct_id}; `;
}
console.log(queryArray);
conn.query(queryArray, function (err, result) {
if(err) throw err;
console.log(result);
res.render('myProfile/contacts', {
title: `${req.session.user_nickname}'s Contacts`,
data: result
});
});
});
但我有个错误
er\u parse\u error:您的sql语法有错误;
..当queryarray.length>1时
我搜索了一些关于多语句查询的内容,但我不知道如何解决它。
编辑2:
我修改了我的代码。。
conn.query('SELECT * FROM user_contacts WHERE user_id= ?', req.session.user_id, function (err, result) {
if(err) throw err;
var datas = [];
for(var i = 0; i < result.length; i++){
getContacts = function(query){
conn.query(query, function (err, result) {
console.log('Creating data');
data = {
user: req.session.user_nickname,
contact:{
ct_firstName: result[0].ct_firstName,
ct_SecondName: result[0].ct_SecondName,
ct_PhoneNumber: result[0].ct_PhoneNumber
}
}
return data;
});
}
console.log('Send data to array');
datas.push(getContacts(`SELECT * FROM contacts WHERE ct_id = ${result[i].ct_id}`));
}
console.log(datas); // [ undefined, undefined ]
res.render('myProfile/contacts',{
title: `${req.session.user_nickname}'s profile`,
data: datas
})
});
但现在我的数组包含未定义的对象??有什么解决办法吗?也许是关于范围的?
我的结果:
向阵列发送数据
向阵列发送数据
[未定义,未定义]
创建数据
创建数据
在创建对象之前,我将其推入数组。怎么可能?
1条答案
按热度按时间gj3fmq9x1#
1797,
我注意到你有几个小的查询获取一个给定用户的联系信息。您可以通过将查询组合成单个查询来简化代码。通常情况下,一个大查询效率更高(而且更易于维护)。我在使用连接。更多信息请点击此处。