Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在nodejs中进行postgres条件查询_Sql_Node.js_Postgresql - Fatal编程技术网

Sql 在nodejs中进行postgres条件查询

Sql 在nodejs中进行postgres条件查询,sql,node.js,postgresql,Sql,Node.js,Postgresql,我有selectquery,我想添加filter和search值来选择query。用户可以单独或同时执行搜索和筛选。以下是场景: 当我仅应用搜索时(成功) 当我仅应用第一个过滤器时(成功) 当我应用两个过滤器时(成功) 当我仅应用第二个过滤器时(失败) 当我应用搜索和两个过滤器时(失败) 当我应用搜索和第一个过滤器时(失败) nodejs const query = { text: ` select master.contact.id, master.contac

我有
select
query,我想添加
filter
search
值来选择query。用户可以单独或同时执行搜索和筛选。以下是场景:

当我仅应用搜索时(成功)

当我仅应用第一个过滤器时(成功)

当我应用两个过滤器时(成功)

当我仅应用第二个过滤器时(失败)

当我应用搜索和两个过滤器时(失败)

当我应用搜索和第一个过滤器时(失败)

nodejs

const query = {
    text: `
      select master.contact.id,
      master.contact.name
      from
      master.contact
       `
  };
  if (input.search) {
    query.text += ` where
    (master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
  }

  if (input.filters) {
    const {
      isActive,
      pan
    } = input.filters;
    if (isActive !== undefined) {
      query.text += ` where master.contact.isActive = ${isActive}`;
    }

    if (pan) {
      query.text += `and master.contact.pan = ${pan}`;
    }

如何收集数组中的条件,然后加入并附加它,如下所示:

const query = {
    text: `
      select master.contact.id,
      master.contact.name
      from
      master.contact
       `
  };

// Create an array to store any criteria
var where = [];

  if (input.search) {
    where.push(`(master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`);
  }

  if (input.filters) {
    const {
      isActive,
      pan
    } = input.filters;
    if (isActive !== undefined) {
      where.push(`master.contact.isActive = ${isActive}`);
    }

    if (pan) {
      where.push(`master.contact.pan = ${pan}`);
    }

// If criteria were added, append to query text
if (where.length > 0) {
   query.text += ' where ' + where.join(' and ');
}

我最终使用了
,其中1=1
。但这很好
select name, id from master.contact where isActive=true and pan='abcd';
select name, id from master.contact and pan='abcd';
select * from master.contact where name ilike 'sal%' or name ilike 'man%' where master.contact.is_active = true and pan='abcd';
select * from master.contact where name ilike 'sal%' or name ilike 'man%' where master.contact.is_active = true;
const query = {
    text: `
      select master.contact.id,
      master.contact.name
      from
      master.contact
       `
  };
  if (input.search) {
    query.text += ` where
    (master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
  }

  if (input.filters) {
    const {
      isActive,
      pan
    } = input.filters;
    if (isActive !== undefined) {
      query.text += ` where master.contact.isActive = ${isActive}`;
    }

    if (pan) {
      query.text += `and master.contact.pan = ${pan}`;
    }
const query = {
    text: `
      select master.contact.id,
      master.contact.name
      from
      master.contact
       `
  };

// Create an array to store any criteria
var where = [];

  if (input.search) {
    where.push(`(master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`);
  }

  if (input.filters) {
    const {
      isActive,
      pan
    } = input.filters;
    if (isActive !== undefined) {
      where.push(`master.contact.isActive = ${isActive}`);
    }

    if (pan) {
      where.push(`master.contact.pan = ${pan}`);
    }

// If criteria were added, append to query text
if (where.length > 0) {
   query.text += ' where ' + where.join(' and ');
}