2017-01-12 3 views
0

SQLクエリでjavascript配列を使用することはできますか?SQLクエリのJavaScript配列?

2番目のクエリでパラメータとして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); 
    }); 
}); 
+0

たとえば、AJAX – mplungjan

+0

などを使用してサーバーに送信する場合のみ、2つのクエリを 'JOIN'と組み合わせるのはなぜですか? – Barmar

+1

連結するときに 'studentsId'の前後に引用符を入れないでください。これはIDのリストではなく、 'IN()'リストの単なる要素になります。 – Barmar

答えて

0

はい、ただしあなたのやり方と正確には一致しません。私が変わってしまう

studentsId.push(rows[i].id); 

studentsId.push('"' + rows[i].id + '"'); 

次に、この

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) { 
にこのライン

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) { 

を変更3210

あなたのコードは正常に動作するはずです。

最初に変更すると、IDに引用符が追加されます。あなたのIDが数字の場合、これは必ずしもそうではないかもしれません。

2回目の変更では、IDをカンマで結合するため、on節で使用できます。

+1

配列が文字列に変換されるとき、自動的にコンマで結合されるので、それはその周りに追加された引用符を除いて、彼がやっていたことを効果的に行います。 – Barmar

+0

何年も待っていて、私は何のためにも参加しませんでした.- – Kontsnor

+0

ユーザーに表示しているのであれば、カンマの後ろにスペースを入れたいと思っています。 – Barmar

0

だけではなく、別のクエリを作成する、最初のクエリにattendancesJOINを追加します。

db.query('SELECT users.* FROM users JOIN classes ON users.class_id=classes.id join attendances ON attendances.user_id = users.id WHERE classes.id ="' + req.body.classSelect + '" AND attendance_timestamp BETWEEN "2016-01-01" AND "2016-12-31" ', function (err, rows) {