首页 > 解决方案 > 如何使用 knexjs 计算表格中的所有空单元格?

问题描述

我有一个有多行的表,每行都有空单元格,我试图将每行中的所有空单元格计算为总数。

表模式 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);
  })

但这对我不起作用。

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

标签: knex.js

解决方案


我能想到的最接近用空字符串计算列的方法是:

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

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

empty_cols
==========
1
3
2
3
1

正如您所指出的,它似乎不太灵活,但是如果不了解更多有关问题的信息,就很难就首选架构提出建议。


推荐阅读