如何使用knexjs计算表中的所有空单元格?

时间:2019-07-26 12:35:14

标签: knex.js

我有一个包含多行的表,每一行都有空单元格,我试图统计每行中所有空单元格的总数。

表模式ID,名称,colmn1,colmn2,colmn3,colmn4等...直到colmn20

我试图做这样的事情

knexDb('users').where(function() {
    this.where('colmn1', '=', '')
    .orWhere('colmn2', '=', '')
    .orWhere('colmn3', '=', '')
    .orWhere('colmn4', '=', '')
    .orWhere('colmn5', '=', '')
    .orWhere('colmn6', '=', '')
    .orWhere('colmn7', '=', '')
    .orWhere(........ etc till colmn20
  })
  .map(function(row) {
    // console.log(row)
    var emptycolmns = 0;
    if(row.colmn1 === ''){
      emptycolmns++
    }else if (row.colmn2 === ''){
      emptycolmns++
    }else if ....... etc till colmn20
  })
  .then(rows => {
    console.log(rows);
    console.log(emptycolmns);
  })

但这对我不起作用。

PS 。如您所见,对所有列进行硬编码都不是一件好事,是否有更好的方法来实现这两个结果,并提供更好的解决方案。

1 个答案:

答案 0 :(得分:1)

我想到的最接近计数带有空字符串的列的事情是:

if( $(input).attr('type') == 'password' && /^[a-zA-Z0-9- ]*$/.test($(input).val()) != false) {
  return false;
}

在这里,您依赖于每个表达式都将解析为整数的事实,因此最终您将得到类似以下结果:

knex.raw(
  `select (col1='') + (col2='') + (col3='') as empty_cols from foo`
)

正如您所指出的那样,它似乎不太灵活,但是在不了解更多有关问题的情况下,很难就首选方案提出建议。