MD 数组:如果未找到值,则添加其他数组
MD array: Add additional array if value isn't found
我目前正在尝试使用Google表格根据从我的MYSQL数据库中提取的信息生成报告。
问题是有 5 个标头值:['Call Disposition', 'Answered', 'Busy', 'No Answer','Failed']
但问题是从数据库中提取的数据几乎将具有 3 个值中的 4 个,这将定义我的 Google 图表标题,原因是如果找到"失败"并且只有一个值具有它,我从 Google 图表收到以下错误:Uncaught Error: Row 0 has 4 columns, but must have 5
只是为了在数据库中清楚起见,这些值是根据调用发生的情况自动插入的,并非所有调用都会失败。
只有少数实例的值会失败,所以我正在尝试开发一种方法,如果找不到特定数字,则添加该额外数组。
例如,这是它当前的样子,基于我从数据库中提取并推入 MD 数组的内容:
[ [ 'ANSWERED', '477', 728 ],
[ 'BUSY', '477', 48 ],
[ 'NO ANSWER', '477', 277 ],
[ 'ANSWERED', '488', 953 ],
[ 'BUSY', '488', 9 ],
[ 'FAILED', '488', 1 ],
[ 'NO ANSWER', '488', 126 ] ]
因此,如果说没有数组中的数字没有失败处置,请添加它,但每次找不到每个数字时都像这样将值设置为 0:
[ [ 'ANSWERED', '477', 728 ],
[ 'BUSY', '477', 48 ],
[ 'FAILED', '477', 0 ],
[ 'NO ANSWER', '477', 277 ],
[ 'ANSWERED', '488', 953 ],
[ 'BUSY', '488', 9 ],
[ 'FAILED', '488', 1 ],
[ 'NO ANSWER', '488', 126 ] ]
我现在的代码如下:
function SQLReportAgentCalls() {
valueArr = [];
connection2.query({
sql : 'select disposition, src, COUNT(*) from cdr WHERE src="477" or src="488" GROUP BY src, disposition',
timeout : 40000
}, function (error, results, rows, fields) {
console.log("-----------REPORTS------------------------");
for(i in results){
var dipo = results[i]['disposition'];
var src = results[i]['src'];
var count = results[i]['COUNT(*)'];
if(dipo === "FAILED" && count){
var chanar = new Array(dipo,src,count);
valueArr.push(chanar);
}
else if(src && count === null && dipo !== "FAILED" ){
var chanar = new Array("FAILED",src,0);
valueArr.push(chanar);
}
else{
var chanar = new Array(dipo,src,count);
valueArr.push(chanar);
}
}
console.log(valueArr);
console.log("---------------------------------------------------");
SQLReport();
});
}
生成报告的客户端代码:
//This generates the report(Google Chart) based on the information that has been pulled from the CDR table server side.
socket.on("SQL", function (valueArr) {
google.charts.load('current', {
packages : ['corechart']
});
google.charts.setOnLoadCallback(drawMaterial);
var data = valueArr;
function x(data) {
var r = [],
temp;
valueArr.forEach(function (a, i) {
if (!(i % 3)) {
temp = [a[1]];
r.push(temp);
}
temp.push(a[2]);
});
return r;
}
function drawMaterial() {
result = [['Call Disposition', 'Answered', 'Busy', 'No Answer', 'Failed']].concat(x(valueArr));
console.log(result);
var options = {
title : 'Call Disposition',
hAxis : {
title : 'Agents',
minValue : 0,
},
vAxis : {
title : 'Disposition Number'
},
isStacked : true
};
var chartdata = new google.visualization.arrayToDataTable(result);
var material = new google.visualization.ColumnChart(document.getElementById('chart'));
material.draw(chartdata, options);
}
});
这可能吗?不确定Google图表是否提供了自动添加值的选项(如果它们不存在),因此这似乎是我能想到的解决问题的唯一方法。
如果数组需要类似于这个...
['Call Disposition', 'Answered', 'Busy', 'No Answer','Failed']
SQL 更改为这样的东西可能会更容易......
select
a.src,
(select count(*) from cdr where src = a.src and disposition = 'ANSWERED'),
(select count(*) from cdr where src = a.src and disposition = 'BUSY'),
(select count(*) from cdr where src = a.src and disposition = 'NO ANSWER'),
(select count(*) from cdr where src = a.src and disposition = 'FAILED')
from
cdr a
where
a.src in ("477", "488")
group by
a.src
相关文章:
- 对象数组-与其他列数据相比,增加一列
- 如何在 Javascript 中向数组添加其他对象
- 基于其他属性查询多维数组属性
- 将 json 数组的一部分分别排序到同一数组的其他部分
- 从异步调用返回数组,然后为数组的每个元素返回其他异步调用
- 我想重新排列我的数组和其他数组一样,这个数组是键和值
- 通过ajax传递数组和其他数据
- 重新排列数组的索引以匹配其他数组
- 创建一个计算值数组,该数组绑定到AngularJS中的其他输入
- JavaScript:通过其他数组元素的索引访问ArrayElement?array[array[0]返回undefin
- 使用map方法将javascript对象数组转换为其他对象数组
- 如何使用其他流的值数组创建流
- Javascript将JSON放入数组中,组合并在其他地方使用
- 将动态输入索引到其他动态输入数组
- 当可观察数组是其他模型的属性时,挖空不会更新 UI
- Javascript:如何将数组元素扩展到所有其他元素并创建一个数组
- 如何在运行时向计算可观察量添加其他数组项
- ngRepeat:dupes 使用名为“name”的数组在中继器中复制键.用其他名称,它是工作
- 通过jquery将数据从数组从页面发送到其他页面
- php 如何将其他选定项添加到数组中