Привет, У меня есть небольшая проблема, когда я запрашиваю 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;
Так уже довольно грязно.