【问题标题】:How to return only number using count?如何使用计数仅返回数字?
【发布时间】:2020-04-20 06:21:02
【问题描述】:

我正在使用knex,我想只返回数字而不是RowDataPacket,这是我的代码:

let totalUsers = await ctx.db('user')
    .join('group', 'user.id', 'group.user_id')
    .where('user.first_name', 'like', '%' + firstName + '%')
    .count()
    .first();

console.log(totalUsers);

基本上这会返回:

RowDataPacket { 'count(*)': 1 }

我只想得到1,我该怎么做?

【问题讨论】:

    标签: mysql node.js knex.js


    【解决方案1】:

    我很确定您可以使用它来获取计数值:

    let count = totalUsers["count(*)"];
    

    我还认为不同 DBRMS 的驱动程序将为计数变量返回不同的名称。例如,对于 SQL Server,我尝试时 count 字段没有正确的名称,只有 ''。因此,为了使其适用于所有 SQL 方言,我将在 SQL 查询中为计数指定一个别名,如下所示:

    .count('* AS c')
    

    然后您可以像这样访问它:

    let count = totalUsers["c"];
    

    【讨论】:

    • 老实说,我不喜欢获取记录数的方法。我希望knex 团队会添加一个方法countRows() 或类似的方法,它只返回数字
    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2016-04-07
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多