объединение переполнения двух запросов mysql в один массив json

  $sql1 =  "select distinct date, count(id) from windows where start_date between '2017-01-01' and '2017-10-31' and (start_date!='0000-00-00') group by date";
$sql2 =   "select distinct date, count(id) from AIX where start_date between '2017-01-01' and '2017-10-31' and (start_date!='0000-00-00') group by date";

У меня есть эти два запроса, которые возвращают вывод в виде (дата, идентификатор). Я хочу объединить эти две таблицы, чтобы получить результат в одном массиве как (date, ID1, ID2), где ID1 — из таблицы «windows», а ID2 — из таблицы «AIX», и в соответствии с датой они должны печатать идентификаторы , Я пытался использовать «присоединиться», но это не сработало.
Я использовал array_merge () в php, чтобы объединить результаты в один массив json, но это тоже не сработало. Есть ли способ решить эту проблему?

2

Решение

Поскольку вы хотите объединить агрегации из двух разных таблиц, я думаю, что вам придется сначала агрегировать по отдельности, а затем каким-то образом объединять результаты. В приведенном ниже запросе я объединяю две таблицы в подзапросах, а затем соединяю их по дате. Это должно работать при условии, что в обеих таблицах присутствуют все даты и они имеют одинаковые даты.

SELECT
t1.date,
t2.cnt1,
t3.cnt2
FROM calendar t1
LEFT JOIN
(
SELECT date, COUNT(id) AS cnt1
FROM windows
WHERE start_date BETWEEN '2017-01-01' AND '2017-10-31'
GROUP BY date
) t2
ON t1.date = t2.date
LEFT JOIN
(
SELECT date, COUNT(id) AS cnt2
FROM AIX
WHERE start_date BETWEEN '2017-01-01' AND '2017-10-31'
GROUP BY date
) t3
ON t1.date = t3.date;

Как я уже упоминал выше, если в какой-либо таблице полностью отсутствует дата, вам придется проделать дополнительную работу. В этом случае вы можете прибегнуть к объединению с таблицей календаря, чтобы включить недостающие даты.

Редактировать:

Я немного обновил запрос, чтобы использовать таблицу календаря. Чтобы этот запрос работал, просто определите таблицу calendar с date столбец, содержащий полный диапазон дат, чтобы охватить обе ваши таблицы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector