当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何在BookshelfJS中的Query中使用ID?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个领域它有逗号分隔的ID,所以我想从所选的id中找到,这是我的代码, .get(function(req, res) { knex.select('*') .from('exam') .whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id]) .then(functi
我有一个领域&它有逗号分隔的ID,所以我想从所选的id中找到,这是我的代码,

.get(function(req, res) {
  knex.select('*')
  .from('exam')
  .whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id])
  .then(function(rows) {
    //return res.send(rows);
    console.log(rows);
  })
  .catch(function(error) {
    console.log(error)
  });
});

===>虽然我使用KNEX它会给出一个像这样的错误,

{ error: function regexp_split_to_array(text) does not exist
  name: 'error',
  length: 220,
  severity: 'ERROR',
  code: '42883',
  detail: undefined,
  hint: 'No function matches the given name and argument types. You might need to add explicit type casts.',
  position: '37',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'parse_func.c',
  line: '523',
  routine: 'ParseFuncOrColumn' 
}

>在student_id列中,我有这样的ID,33,34,35,36
>在req.params.id我只有一个像35这样的ID.
>所以我想在同一个表中包含35个ID的行.

===>所以我只想要两排(2,3),因为它包含ID = 35.

假设你正在使用PostgreSQL数据库(我看到你在屏幕截图上使用phpPgAdmin).您可以使用 regexp_split_to_array函数将字符串转换为数组(显然:).并使用any执行搜索结果数组.

在SQL语言中,它可以这样写

select '35' = any(regexp_split_to_array('33,34,35,36', E','));

在您的查询中,您可以替换.where

.whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])

但请记住,这可能是性能繁重的请求,因为每行执行字符串拆分操作.更好的方法(假设项目必须在一行中包含数组值)是将student_id存储在Array类型中,并在student_id列上添加gin索引并执行搜索操作,如this

select * from table where student_id @> '{35}';
网友评论