Maison  >  Questions et réponses  >  le corps du texte

Quel est le problème avec cette méthode de mise à jour dynamique de plusieurs lignes ?

exports.createTaskDataForNewDay = async function(values) {
  try {
    console.log("values", JSON.stringify(values))
    let pool = await CreatePool() //[timestamp , requiredTimes , reward , difficulty ,taskId , uid , csn]
    let query = "update userTaskData set timestamp = ?,requiredTimes=?,timesCompleted=0,reward=?,difficulty=?,state=1,taskId=?,replacedF=0,replacedC=0 where uid =? and suitCase = ?"
    let resp = await pool.query(query, [values])
    if (resp.changedRows > 0) {
      return resp
    } else return {
      code: 400,
      mesage: "Could not insert data ! please try again or check syntax"
    }
  } catch (error) {
    console.error(error)
    return {
      code: 500,
      message: error.message
    }
  }
}

La "valeur" transmise à la fonction est un tableau de tableaux. Chaque élément contient des données d'espace réservé pour une ligne différente que je souhaite mettre à jour. Mais j'obtiens une erreur qui est Parse Error - Il y a un problème avec la syntaxe et la requête enregistrée est -

sql: `update userTaskData set timestamp = (1686124176992, 1, '{\"t\":\"c\",\"v\":1000}', 1, 't1', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 3, '{\"t\":\"g\",\"v\":10}', 1, 't9', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 5, '{\"t\":\"c\",\"v\":4000}', 2, 't17', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 3, '{\"t\":\"c\",\"v\":1000}', 3, 't21', '21GGZzSudOdUjKXcbVQHtFtTK772', 1),requiredTimes=?,timesCompleted=0,reward=?,difficulty=?,state=1,taskId=?,replacedF=0,replacedC=0 where uid =? and suitCase = ?

Il place tous les éléments dans le premier espace réservé. Cela fonctionne bien pour les requêtes d'insertion. S'il vous plaît, dites-moi ce que je fais de mal.

P粉298305266P粉298305266236 Il y a quelques jours297

répondre à tous(2)je répondrai

  • P粉852578075

    P粉8525780752024-02-26 16:32:19

    Peut-être que "value" est déjà un tableau et n'a pas besoin d'être enveloppé dans un autre tableau. Vous pouvez le transmettre directement de la manière suivante :

    Laissez resp = waitpool.query(requête, valeur);

    répondre
    0
  • P粉038161873

    P粉0381618732024-02-26 00:18:23

    mysqljs/mysql模块不支持通过objectsarrays进行批量记录,用于UPDATE方法与您熟悉的 INSERT 方法相同。您所想象的甚至不是 MySQL 的本机功能并且最多只能通过如果您想使用实际的UPDATE方法,请切换CASE.

    Cela vous laisse deux options :

    Option 1

    Tant que votre table et les données fournies pour la mise à jour contiennent des clés uniques, vous pouvez utiliser INSERT INTO table_name SET ? Concernant les mises à jour de clés en double...

    Option 2

    Si vous n'avez pas de champs à clé unique et de valeurs correspondantes dans votre requête pour une table donnée, vous devez construire la requête en itérant sur les entrées afin de vous retrouver avec une collection de chaînes contenant autant de comme vous souhaitez mettre à jour 的字符串集合更新您将拥有的查询 - 或 - 通过构建利用 CASE Aura une requête - ou - en construisant une requête qui profite de la condition CASE

    .

    Vous pouvez voir quelques exemples ici : Comment créer des instructions d'insertion dynamique basées sur le corps POST

    🎜

    répondre
    0
  • Annulerrépondre