JavaScript MySql INSERT оператор для нескольких строк через URL - PullRequest
0 голосов
/ 14 марта 2019

Добрый день! Я пытаюсь отправить массив объектов в базу данных MySql через URL с помощью API.

Вот код моего API:

app.get("/orderdetails/add", (req, res) => {
  const {
    item__,
    Qty_Ordered,
    Unit_Price,
    Ext_Price
  } = req.query;
  const INSERT_ORDERDETAILS_QUERY = `INSERT INTO oe_details (item__, 
    Qty_Ordered, Unit_Price, Ext_Price) VALUES('${item__}', '${Qty_Ordered}', 
    '${Unit_Price}', '${Ext_Price}')`;
  connection1.query(INSERT_ORDERDETAILS_QUERY, (err, results) => {
    if (err) {
      return res.send(err);
    } else {
      return res.send("successfully added order details");
    }
  });
});

И ниже функция в моем приложении:

addOrderDetails = _ => {
  const o = this.props.o;
  const summary = o.filter(function(obj) {
    return obj.Quantity >= 1;
  });
  var url = "";
  summary.forEach(function(e) {
    url +=
      "item__=" +
      e.ExternalID +
      "&Qty_Ordered=" +
      e.Quantity +
      "&Unit_Price=" +
      e.Price +
      "&Ext_Price=" +
      e.ExtPrice +
      "&";
  });
  url = url.trim("&");
  fetch(`http://localhost:4000/orderdetails/add?${url}`).catch(err =>
    console.error(err)
  );
};

Когда я запускаю addOrderDetails, я отправляю MySql следующую инструкцию:

INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price) 
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75')

Что не так ... есть ли способ добавить несколько строк в базу данных mysql, используя ту же концепцию?

работает нормально, если у меня есть только 1 строка для добавления ...

Помощь будет принята с благодарностью!

Спасибо

1 Ответ

1 голос
/ 14 марта 2019

Чтобы вставить несколько строк, оператор MySQL должен выглядеть как

INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price)
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75'),
VALUES('C-2080,C-2081', '8,5', '18.75,18.75', '150,93.75'),
VALUES('B-2080,B-2081', '8,5', '18.75,18.75', '150,93.75');

Вы можете изменить свой API на вызов POST и отправить ему массив ваших данных, а внутри своего API вы можете сформировать вышеуказанный запрос.

Вы можете использовать простой цикл for для создания такого запроса.

let summary = [1,2,3,4] // dummy data
let INSERT_ORDERDETAILS_QUERY = `INSERT INTO oe_details (item__, Qty_Ordered, Unit_Price, Ext_Price) VALUES`
summary.forEach(function(data, i) {
  INSERT_ORDERDETAILS_QUERY = `${INSERT_ORDERDETAILS_QUERY} (${data})`;
  INSERT_ORDERDETAILS_QUERY = (i !== summary.length - 1) ? `${INSERT_ORDERDETAILS_QUERY}, ` : `${INSERT_ORDERDETAILS_QUERY};`;
})

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...