Удалить последнюю строку Sqlite с таким же значением имени - PullRequest
0 голосов
/ 10 июля 2019

Как я могу написать функцию, которая будет удалять только одну строку (в идеале последнюю) с заданным именем (которое может быть не уникальным).

Я попытался использовать количество строк, лимиты и собственную встроенную функцию (ниже).Ни один из них не сработал.

app.delete('/FamilyMember/:db', (req, res) => {
  let db = openDB("ClientsDatabases/"+req.params.db);
  let ids = [];
  db.serialize(()=>{
    db.each('select * from family', (err, row)=> {
      if (row.name == req.body.name) {
        ids.push(row.id);
      }
    })
    db.run("DELETE FROM family WHERE id = ?",ids[ids.length-1], (err)=> {
      console.log("Here is the err "+err);
      if (!err) console.log('Succesful @ deleting', req.body.name);
    });
  })
  res.send();
}, () => {
  db.close();
})

Мой ожидаемый вывод - удаление только одной строки с заданным именем, но таблица не изменяется и ошибки не обнаруживаются.

1 Ответ

1 голос
/ 10 июля 2019

Есть ли какая-то конкретная причина, по которой у вас есть одинарные кавычки (') вокруг параметра ? при вызове Statement#run?Ничто в документации API не говорит о том, что это правильная практика, может быть объяснением того, почему ваш запрос искажен до такой степени, что он ничего не удаляет, но также не выдает ошибку.Я ожидаю, что ваш звонок на .run() будет выглядеть примерно так:

db.run("DELETE FROM family WHERE id = ?",ids[ids.length-1], (err)=> {
    console.log("Here is the err "+err);
    if (!err) console.log('Succesful @ deleting', req.body.name);
});

В качестве альтернативы вы можете быть заинтересованы в упрощении ваших запросов в одно утверждение, которое захватит максимум id (при условии, что id увеличивается каждый раз) и удалите эту запись:

db.run("DELETE FROM family WHERE id = MAX(id)", (err)=> {
    console.log("Here is the err "+err);
    if (!err) console.log('Succesful @ deleting', req.body.name);
});

Это устраняет необходимость сначала загружать все содержимое family, чтобы просто извлечь из него один id.

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