let todo = [1, 2, 3, 4, 5, 6, 7, 8];
var stmt = "SELECT * FROM MY_USERS WHERE USER_ID = ?";
connection.query(stmt, todo, function(err, row) {
});
connection.release();
Я хотел бы, чтобы SELECT * FROM MY_USERS WHEREUSER_ID мог быть любым значением в массиве [1, 2, 3, 4, 5, 6, 7, 8].
Есть ли способ сделать это без повторения массива, построения нового сегмента строки и объединения его с окончательным оператором запроса?
Спасибо всем заранее.
РЕДАКТИРОВАТЬ
Я не могу заранее сказать точное количество элементов массива, поэтому SELECT * FROM MY_USERS WHERE USER_ID IN (?, ?, ?, ?, ?, ? ,? ,?) не подойдет.
@slon Я только что отредактировал его на Как добавить значения массива в оператор SQL в Javascript
Вы можете превратить массив в строку, разделенную запятой, и поместить в .... USER_ID IN (строка, разделенная запятыми)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


SELECT * FROM MY_USERS WHERE USER_ID IN (?, ?, ?, ?, ?, ? ,? ,?)
Просто убедитесь, что количество ? соответствует количеству элементов in вашего массива параметров.
Затем, наконец, используйте todo.length, чтобы сделать что-то вроде:
let todo = [1, 2, 3, 4, 5, 6, 7, 8];
var stmt = "SELECT * FROM MY_USERS WHERE USER_ID IN (";
for (let i = 0; i < todo.length; i++) {
if (i === 0) {
stmt += "?";
} else {
stmt += ", ?";
}
}
stmt += ")";
connection.query(stmt, todo, function(err, row) {});
connection.release();
Спасибо за ответ @aaron, но нет возможности заранее определить длину массива.
используйте todo.length, затем сделайте что-то вроде stmt = 'SELECT * FROM MY_USERS WHERE USER_ID IN ('; for (let i=0; i<todo.length; i++){ if (i === 0) {stmt += ' ?'} еще {stmt += ', ?'} }; stmt += ')'
let todo = [1, 2, 3, 4, 5, 6, 7, 8];
var stmt = `SELECT * FROM MY_USERS WHERE USER_ID IN (${todo.join(",")})`;
console.info(stmt); // your queryВы можете использовать литералы шаблонов, подобные этому. Таким образом, вам не придется беспокоиться о количестве элементов в массиве. См. Массив.прототип.join()
let todo = [1, 2, 3, 4, 5, 6, 7, 8];
var stmt = `SELECT * FROM MY_USERS WHERE USER_ID IN (${todo.join(",")})`;
В вашем заголовке написано «вставить», но в вашем запросе есть выбор. Сбивает с толку.