【问题标题】:Write a query that change according to the variable编写一个根据变量变化的查询
【发布时间】:2021-11-24 13:02:38
【问题描述】:

我想根据 JSON 进行查询。

在 JSON 上有列的名称,然后是值,例如:

"siret": "21157890",
"name":"Toto",
"address": "random address",
"city": "Paris"

我正在使用 PostgreSQL 和 Typescript。

目前这是有效的,但仅适用于特定列

await db.query(`
    INSERT INTO user_company_fk (name, address)
    VALUES ($1, $2)
    `, [param.name, param.address]);

但如果用户只是发送姓名,我不想更新地址。

或者如果他发送其他栏目,我想更新其他栏目。

【问题讨论】:

  • 我不擅长打字,但我可以用php给你想法
  • 是的,也许它会帮助我

标签: jquery typescript postgresql api


【解决方案1】:

我重用了 Karnal-YK 的代码,将其改编为 TypeScript 和表格更新

let field = '';
const valueArray:string[] = [];
let count = 1;
let queryStr = '';
try {
    Object.entries(body).forEach((entry) => {
      const [key, value] = entry;
      field += key + ' = $' + count.toString() + ', ';
      valueArray[count - 1] = value as string; // array start at 0
      count += 1;
    });
    field = field.slice(0, -2); // remove ', ' for the last one
    queryStr = 'UPDATE companies SET ' + field + ' WHERE id = ' + companyId;
    const result = await db.query(queryStr, valueArray);

【讨论】:

    【解决方案2】:

    我在 php.ini 中给出示例。在打字稿中根据需要进行转换。 您可以转换 json to array 然后在该数组上使用 for 循环。假设您发送了 Siret 和名称,那么您的数组将是

    $arr = ['siret' => '21157890', 'name' => 'xyz'];
    $str1 = '';
    $valStr = '';
    $array1 = [];
    $count = 1;
    foreach ($arr as $key => $value) {
      $str1 .= $key. ', ';  // concatenate the string $key has siret
      $valStr .= '$'.$count. ', ';  // to use $1, $2, $3 etc
      $array1[] = $arr[$key]; // $value has 21157890
    }
    $str1 = rtim( $str1 , ', '); // remove the last comma from string
    $valStr = rtim( $valStr , ', ');
    

    现在创建类似的查询

    $sql = "INSERT INTO user_company_fk (" . $str1 . ") VALUES(" . $valStr . ")";
    
    await db.query($sql, $array1);
    

    代码示例在 php 中,但我认为它可以帮助您。如果它适合您,您可以在此处进行编辑。我会批准你的代码

    【讨论】:

    • 我认为这行得通!我明天会发布更新
    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2021-02-11
    相关资源
    最近更新 更多