Mysql 如何计算数组中对象的不同值

Mysql 如何计算数组中对象的不同值,mysql,node.js,Mysql,Node.js,在数据库中,我有两个列:id和value。我想检查我的结果中有多少difrentid,我该怎么做 我曾试图想出一个解决方案,但除了countDifferentId(){//do some magic calculations} 结果如下所示: [ RowDataPacket { id: 76561198115203520, value: 73 }, RowDataPacket { id: 76561198115029751, value: 73 } Row

在数据库中,我有两个列:
id
value
。我想检查我的
结果中有多少difrent
id
,我该怎么做

我曾试图想出一个解决方案,但除了
countDifferentId(){//do some magic calculations}

结果
如下所示:

[ RowDataPacket {
    id: 76561198115203520,
    value: 73 },
  RowDataPacket {
    id: 76561198115029751,
    value: 73 }
  RowDataPacket {
    id: 76561198115702984,
    value: 73 },
  RowDataPacket {
    id: 76561198115203520,
    value: 73 } ]

所以
countDifferentId()
的结果应该是3

您不想在分组查询中这样做吗?这里有很多例子。e、 g

等等

如果您只有来自API的服务器请求,则可能需要。创建哈希表,如 { id:计数
}

是否要在分组查询中执行此操作?这里有很多例子。e、 g

等等

如果您只有来自API的服务器请求,则可能需要。创建哈希表,如 { id:计数
}

函数从一个数组列中获取所有值,并作为数组返回

然后for循环使用数组存储计数的值,每次检查数组以确保值只计数一次

function getCol(myarray, col){ 
    var column = []; 
    for(var i=0; i<myarray.length; i++){ 
        column.push(myarray[i][col]); 
    } 
    return column; 
    }

    cols = getCol(result, 'id');
    var count = 0;
    var used = [];
    for(var i = 0; i<cols.length;i++){
         if(!used.indexOf(cols[i])){
               used.push(cols[i]);
               count++;
         }
     }
函数getCol(myarray,col){ var列=[];
for(var i=0;i函数从一个数组列中获取所有值,并作为数组返回

然后for循环使用数组存储计数的值,每次检查数组以确保值只计数一次

function getCol(myarray, col){ 
    var column = []; 
    for(var i=0; i<myarray.length; i++){ 
        column.push(myarray[i][col]); 
    } 
    return column; 
    }

    cols = getCol(result, 'id');
    var count = 0;
    var used = [];
    for(var i = 0; i<cols.length;i++){
         if(!used.indexOf(cols[i])){
               used.push(cols[i]);
               count++;
         }
     }
函数getCol(myarray,col){ var列=[];
对于(var i=0;i,如果您想在javascript端执行此任务,请执行以下操作:

const rowDataPackets = [
    {
        id: 76561198115203520,
        value: 73
    },
    {
        id: 76561198115029751,
        value: 73
    },
    {
        id: 76561198115702984,
        value: 73
    },
    {
        id: 76561198115203520,
        value: 73
    }
];


function countDifferentId(array){
    // Object with key=id to count unique ids and value is true (or whatever)
    const uniqueIds = array.reduce((acc, data) => Object.assign(acc, {[data.id]:true}) , {});
    // Number of unique ids is the number of keys
    return Object.keys(uniqueIds).length;
}

console.log(countDifferentId(rowDataPackets));

如果您想在javascript端完成这项工作,请执行以下操作:

const rowDataPackets = [
    {
        id: 76561198115203520,
        value: 73
    },
    {
        id: 76561198115029751,
        value: 73
    },
    {
        id: 76561198115702984,
        value: 73
    },
    {
        id: 76561198115203520,
        value: 73
    }
];


function countDifferentId(array){
    // Object with key=id to count unique ids and value is true (or whatever)
    const uniqueIds = array.reduce((acc, data) => Object.assign(acc, {[data.id]:true}) , {});
    // Number of unique ids is the number of keys
    return Object.keys(uniqueIds).length;
}

console.log(countDifferentId(rowDataPackets));


我希望有一个JS解决方案,因为我认为它更快,因为meJS不一定更快,它通常更好地在服务器之间共享工作。
groupby
是一个不错的选择。如果有很多行要获取,而您只想计数,那么最好做一个
select count(distinct id)从…
@RaphaMex开始,行数不会超过100,我需要每1秒打一次电话,这样更好吗?如果你想尝试和比较的话,我制作了一个纯JS解决方案。每秒100行,这对任何一种解决方案都不是问题。我只是在评论,如果你有数千行,最好释放你的网络。我同意这样做在查询级别执行此操作是理想的,但有时这并不是一个可行的选项,这取决于项目动态。我希望使用JS解决方案,因为我认为它更快。对于meJS来说,它不一定更快,它通常更好地在服务器之间共享工作。
Group by
是一个很好的选项。如果有很多行要获取,您只想计数,甚至更好er执行
选择计数(不同id)从…
@RaphaMex开始,行数不会超过100,我需要每1秒打一次电话,这样更好吗?如果你想尝试和比较的话,我制作了一个纯JS解决方案。每秒100行,这对任何一种解决方案都不是问题。我只是在评论,如果你有数千行,最好释放你的网络。我同意这样做在查询级别使用此选项是理想的,但有时根据项目动态,这不是一个可行的选项。请解释一下您的答案好吗?蹩脚的堆栈应用程序发布了两次此消息。如果我想调用
getCol()
我将如何将MySQL
result
解析到函数中?getCol(result,'id'));你能解释一下你的答案吗?蹩脚的堆栈应用程序发布了两次这个消息,如果我想调用
getCol()
我该如何将MySQL
result
解析到函数中?getCol(result,'id'));这很有效!非常紧凑和快速,正是我所需要的注意:我将
const uniqueIds=rowDataPackets.reduce
改为
const uniqueIds=array.reduce
捕捉得很好!很高兴它有帮助:)这很有效!非常紧凑和快速,正是我所需要的注意:我更改了
const uniqueIds=rowDataPackets。将
const uniqueIds=array减少到
const uniqueIds=array。减少
好捕获!很高兴它有帮助:)