こんにちは、mysql にクエリを実行し、データのリストを取得して json エンコードし、グラフ (たとえば、金額と日付の軸) にプロットするという、わずかな問題があります。ただし、SQL は当然のことながら、データがないクエリ データの日付を返しません。そのため、グラフには日付がありません。
私はここで、空白を埋めるためだけに他のテーブルを作成する仕事をしている人々を読みました。これは私にとって選択肢ではありません。
クエリ内のすべての日付の配列を作成するソリューションがあります。
これをクエリ結果の多次元配列に圧縮する方法を誰かが提案できますか。うまくいけば、巧妙な foreach の何らかの手段によって。
または、空白の日付を埋めることができるかどうかわからないSQL関数はありますか?
私のクエリは現在次のようになっています:
SELECT SQL_CALC_FOUND_ROWS Date, SUM(call_answer) AS call_answer, SUM(call_busy) AS call_busy, SUM(call_noanswer) AS call_noanswer, SUM(call_notrec) as call_notrec
FROM (
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, COUNT(id) as call_answer, 0 as call_busy, 0 as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND dialStatus = 'NORMAL_CLEARING' GROUP BY Date )
AS t_0
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, COUNT(id) as call_busy, 0 as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND dialStatus = 'USER_BUSY' GROUP BY Date )
AS t_1
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, 0 as call_busy, COUNT(id) as call_noanswer, 0 as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND (dialStatus = 'ORIGINATOR_CANCEL' OR dialStatus = 'NO_USER_RESPONSE') GROUP BY Date )
AS t_2
UNION
SELECT * FROM (
SELECT substring(dateCreated, 1,10) AS Date, 0 as call_answer, 0 as call_busy, 0 as call_noanswer, COUNT(id) as call_notrec
FROM cdr
WHERE (company = '8346767432431') AND (dateCreated >= '2012-10-16' ) AND (dateCreated <= '2012-11-16' ) AND (dialStatus = 'UNALLOCATED_NUMBER' OR dialStatus = 'INVALID_NUMBER_FORMAT') GROUP BY Date )
AS t_3
)
AS t_total
GROUP BY Date;
だからすでにかなり面倒です。