Как отобразить данные из другой таблицы и даты на графике - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу показать свои данные из базы данных в диаграмму, здесь я использую Google Chart.

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

например, у меня есть такие данные.

table1

date(table1)    sh_sh  
---------    ------------ 
2018-04-25   data1
2018-04-26   data2
2018-04-27   data3

table2

date(table2)    ip  
---------    ------------ 
2018-04-28   data1
2018-04-25   data2
2018-04-24   data3

и я запускаю такой код, я получил этот код от мой вопрос раньше

SELECT urls.date, urls.count AS sh_count, ip.count AS ip_count FROM
(SELECT date(date) AS date, COUNT(*) AS count FROM table1 GROUP BY date(date)) AS urls JOIN
(SELECT date(date) AS date, COUNT(*) AS count FROM table2 GROUP BY date(date)) AS ip ON urls.date = ip.date

вывод

date(url)    count(sh_sh)    count(ip)
---------    ------------    ----------
2018-04-25   1               1

дата 24,26,27,28 не показывается, причина в другую дату.

что мне нужно сделать, чтобы отобразить данные с разными таблицами и датами .

и когда нет данных, я хочу напечатать 0 .

вот мой скрипт скрипта

<script type="text/javascript">
    google.charts.load('current', {'packages':['corechart']});
    google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
    var data = google.visualization.arrayToDataTable([
    ['Date', 'Urls', 'Clicks'],
    <?php
    while ($areacharts = $areachart->fetch()) { 
    echo "['".$areacharts['date']."',".$areacharts['sh_count'].",".$areacharts['ip_count']."],";
    } ?>
    ]);
    var options = {
              hAxis: {title: 'Date',  titleTextStyle: {color: '#333'}},
              vAxis: {minValue: 0}
            };
    var chart = new google.visualization.AreaChart(document.getElementById('summary_chart'));
            chart.draw(data, options);
    }
    $(window).resize(function(){
      drawChart();
    });
</script>

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Что по этому поводу:

SELECT
    a.`date`,
    sum(a.sh_sh_cnt) as sh_sh_cnt,
    sum(a.ip_cnt) as ip_cnt
FROM(SELECT
        `date`,
        count(*) as sh_sh_cnt,
        sum(0) as ip_cnt
    FROM table1
    GROUP BY `date`

    UNION ALL

    SELECT
        `date`,
        sum(0) as sh_sh_cnt,
        count(*) as ip_cnt
    FROM table2
    GROUP BY `date`) a
GROUP BY a.`date`

Это не очень красиво, но должно работать.

С теми же данными, что и у вас, это должно вернуть:

date        sh_sh_cnt  ip_cnt
----        ---------  ------
2018-04-24  0          1
2018-04-25  1          1
2018-04-26  1          0
2018-04-27  1          0
2018-04-28  0          1

Также, пожалуйста, не называйте свое поле даты "дата". Это зарезервированное слово ... Вы не хотите использовать зарезервированные слова для имен полей! Это сработает, не поймите меня неправильно, но это очень, очень плохая практика!

0 голосов
/ 26 апреля 2018

используйте UNION ALL, чтобы объединить два результата,
затем снова сгруппировать по дате,
как то так ...

SELECT
  a.date AS date,
  SUM(a.count) AS count
FROM (
  SELECT date(date) AS date, COUNT(*) AS count FROM sh_url GROUP BY date(date)
  UNION ALL
  SELECT date(date) AS date, COUNT(*) AS count FROM tracking GROUP BY date(date)
) a
GROUP BY
  a.date
...