Mein Problem ist, wenn ich Array von Benutzern bekomme und versuchen, async jedes starten es jedes sqlRequest starten und nicht eins nach dem anderen schieben Array.SQL-Abfrage mit Async jede
Es sollte sqlRequest 1 nach 1, und nicht alle von jedem Benutzer sqlRequest und der Push in einem Array tun. Hier
ist ein asynchroner jeder
function getUserFavCat(params, callback) {
var usersArrayCat = [];
async.each(params, function (user, cb) {
sqlRequest("SELECT b_cat.title, b_cat.id FROM dbo.Students st INNER JOIN dbo.SaleView sv ON sv.userId = st.id INNER JOIN dbo.KEY_BrandcategoryToSale b_key ON b_key.saleId = sv.saleId INNER JOIN dbo.BrandCategories b_cat ON b_cat.id = b_key.brandCategoryId WHERE st.id = " + user.id, function (err, result) {
if (!result) {
//console.error("NO FAVOURITE CATEGORY FOR USER " + JSON.stringify(user))
} else if (result.length == 0) {
//console.error("NO FAVOURITE CATEGORY FOR USER " + JSON.stringify(user))
} else {
user.favouriteCat = utils.takeMostRepeatingObj(result);
usersArrayCat.push(user);
}
cb();
})
}, function() {
callback(null, usersArrayCat)
});
};
Hier wird die SQL-Abfrage:
function sqlRequest (sqlQuery, callback) {
var connection = new sql.Connection(sql_conf, function (err) {
if (err){
console.log(err)
} else {
var request = new sql.Request(connection);
request.query(sqlQuery, function(err, result) {
console.log(result)
if(err){
console.error(err)
} else if(!result){
console.error("NO RESPONSE SQL QUERY")
} else {
callback(null, result);
connection.close();
}
})
}
});
connection.on('error', function(err) {
console.log(err);
});
};
Nicht mit Ihrer Frage verbunden, aber bauen Sie Ihre Abfragen nicht so - Sie sind ein Loch zu SQL Injection opens. –
aber wie sollte ich eine Schleife mit SQL-Abfragen ausführen? –
Sorry, ich habe diesen Teil 'WHERE st.id =" + user.id' gemeint. Verketten Sie Ihre Strings nicht. Egal welche Bibliothek Sie verwenden, Sie sollten parametrisierte Abfragen erstellen. Machen Sie das. " –