Как добавить значения массива в оператор SQL в Javascript

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 05.06.2019 05:52

@slon Я только что отредактировал его на Как добавить значения массива в оператор SQL в Javascript

Program-Me-Rev 05.06.2019 05:54

Вы можете превратить массив в строку, разделенную запятой, и поместить в .... USER_ID IN (строка, разделенная запятыми)

slon 05.06.2019 06:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
268
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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, но нет возможности заранее определить длину массива.

Program-Me-Rev 05.06.2019 06:00

используйте 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 += ')'

Aaron 05.06.2019 06:02
Ответ принят как подходящий

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(",")})`;

Другие вопросы по теме