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
。我想检查我的结果中有多少difrentid
,我该怎么做
我曾试图想出一个解决方案,但除了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()
我将如何将MySQLresult
解析到函数中?getCol(result,'id'));你能解释一下你的答案吗?蹩脚的堆栈应用程序发布了两次这个消息,如果我想调用getCol()
我该如何将MySQLresult
解析到函数中?getCol(result,'id'));这很有效!非常紧凑和快速,正是我所需要的注意:我将const uniqueIds=rowDataPackets.reduce
改为const uniqueIds=array.reduce
捕捉得很好!很高兴它有帮助:)这很有效!非常紧凑和快速,正是我所需要的注意:我更改了const uniqueIds=rowDataPackets。将const uniqueIds=array减少到const uniqueIds=array。减少
好捕获!很高兴它有帮助:)