SQL 查询中的 JavaScript 数组?

s0c*_*kan 2 javascript mysql express

是否可以在 sql 查询中使用 javascript 数组?

我想在第二个查询中使用 StudentsId 作为参数。

db.query('SELECT users.* FROM users JOIN classes ON users.class_id=classes.id WHERE classes.id ="' + req.body.classSelect + '" ', function (err, rows) {

    // Saves all my users id that i get from my first query
    var studentsId = [];
    for (var i = 0; i < rows.length; i++) {
        studentsId.push(rows[i].id);
    }
    console.log(studentsId);

    // in this query i want to use studentsId
    db.query("SELECT users.id, users.first_name, users.last_name,attendances.type_id,attendances.attendance_timestamp FROM users JOIN attendances ON attendances.user_id = users.id WHERE attendance_timestamp BETWEEN '2016-01-01' AND '2016-12-31' AND user_id IN ('"+ studentsId +"') ", function (err, result) {
        if (err) {
            throw err;
        }
        console.log(result);
    });
});
Run Code Online (Sandbox Code Playgroud)

小智 5

是的,但不完全按照你的方式去做。

我会改变

studentsId.push(rows[i].id);
Run Code Online (Sandbox Code Playgroud)

studentsId.push('"' + rows[i].id + '"');
Run Code Online (Sandbox Code Playgroud)

接下来,更改这一行

db.query("SELECT users.id, users.first_name, users.last_name,
   attendances.type_id,attendances.attendance_timestamp FROM users 
   JOIN attendances ON attendances.user_id = users.id WHERE 
   attendance_timestamp BETWEEN '2016-01-01' AND '2016-12-31' 
   AND user_id IN ('"+ studentsId +"') ", function (err, result) {
Run Code Online (Sandbox Code Playgroud)

对此

db.query("SELECT users.id, users.first_name, users.last_name,
   attendances.type_id, attendances.attendance_timestamp FROM users 
   JOIN attendances ON attendances.user_id = users.id WHERE
   attendance_timestamp BETWEEN '2016-01-01' AND '2016-12-31' 
   AND user_id IN (' + studentsId.join(',') + ') ", function (err, result) {
Run Code Online (Sandbox Code Playgroud)

那么你的代码应该可以正常运行。

第一个更改将引号添加到 ID 中。如果您的 ID 是数字,这可能不是必需的。

第二个更改使用逗号将 ID 连接在一起,因此它们可以在 on 子句中使用。