@givemoneybiatch
Немного веб, немного гейм

Как обновить несколько строк в таблице?

Задача состоит в том, чтобы удалить (обновить) несколько строк в таблице.
Запрос :
db.query("UPDATE products SET deleted = true WHERE id IN ${id};", products);

где, products
var products = { 
id: [1,5,7]

Массив формируется на клиенте, заранее неизвестно какие там значения.
Сейчас получаю ошибку "syntax error at or near array". Не пойму как лучше организовать запрос. Помогите, пожалуйста.
P.S. PostgreSQL 9.5
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Sumor
Не мешало бы уточнить какой язык используете, ну да ладно.
В целом, лучше генерировать запрос с параметрами, а затем их подставлять.
Если число параметров неизвестно, то вы можете добавить их в цикле. Получится примерно следующее (результат будет зависеть от вашего языка).
var query = "UPDATE products SET deleted = true WHERE id  IN(${p1}";
for(var i = 2; i <= products.length; i++)
{
    query += ", ${p" + i + "}"; 
}
query += ");";
return db.query(query, products);

Для вашего примера запрос должен получиться таким:
UPDATE products SET deleted = true WHERE id  IN(${p1}, ${p2}, ${p3});
Ответ написан
@givemoneybiatch Автор вопроса
Немного веб, немного гейм
изменил переменную products на массив var products = [5,7,9];
Изменил запрос - заработало, но мне не нравится, т.к. подставлять данные прямо в запрос - большое зло. В pg-promise есть для этого защита, но честно говоря, с их документацией сложновато разобраться.
return db.query("UPDATE products SET deleted = true WHERE id  IN(" + products + ");");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы