MD 数组:如果未找到值,则添加其他数组

MD array: Add additional array if value isn't found

本文关键字:数组 其他 添加 如果 MD      更新时间:2023-09-26

我目前正在尝试使用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