MySQL пакетная вставка при дублировании (с вложенными операторами выбора) тупиковая ошибка - PullRequest
0 голосов
/ 22 января 2020

Я не могу понять, как избежать возникновения тупиковой ошибки при попытке отправить несколько значений в базу данных mysql. я попытался упорядочить свои значения по id безрезультатно. Я также попытался использовать список списков и json в качестве формата данных. все работает как запланировано, если я отправляю только одно значение.

данные, которые я передаю, выглядят так:

[ 
{ employee: 'Smith Paul T.',
    projectNum: '90668',
    phaseName: '090668 Valve Turning Program',
    hours: '7',
    week: '2020-W01' },
  { employee: 'Smith April T.',
    projectNum: '90668',
    phaseName: 'Professional Services',
    hours: '7',
    week: '2020-W01' },
  { employee: 'Smith Patrick T.',
    projectNum: '90668',
    phaseName: 'Reimbursable Expenses',
    hours: '7',
    week: '2020-W01' } 
]

, и мой метод публикации выглядит так:

router.post('/schedule', (req, res) => {
  const path = require('path');
  for (var schedule in req.body){
    var schedule = JSON.parse(schedule);
    console.log(schedule);
    for (var x in schedule){
      const queryString = 'INSERT INTO schedule (id, employee_id, project_id, project_phase, year_week, hours)
                           VALUES((SELECT * FROM(SELECT schedule.id 
                                                 FROM schedule 
                                                 JOIN employees on employees.id = schedule.employee_id 
                                                 WHERE employees.Employee=? 
                                                 AND schedule.project_phase=? 
                                                 AND schedule.year_week=?)
                                                 tbltmp),
                                  (SELECT id 
                                   FROM employees 
                                   WHERE Employee=?),
                                  (SELECT MIN(pID) 
                                   FROM projects 
                                   WHERE pNUM = ? 
                                   AND pPhase = ?),
                                   ?,
                                   ?,
                                   ?) 
                            ON DUPLICATE 
                            KEY UPDATE hours=?';
      pool.query(queryString, [schedule[x].employee, schedule[x].phaseName, schedule[x].week, schedule[x].employee, schedule[x].projectNum, schedule[x].phaseName, schedule[x].phaseName, schedule[x].week, schedule[x].hours, schedule[x].hours], (err, results, fields) => {
        if(err) {
          console.log('Failed to submit hours: ', err);
          res.sendStatus(500);
          return;
        }
        else{
          res.json('success');
          console.log('Schedule update successfull');
          next();
        }
      });
    }
  }
  res.end();
}); 

любая помощь с этим будет очень ценится

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