如何将不同表中的数据和日期显示到图表

uurity8g  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(386)

我想显示我的数据从数据库到图表,在这里我使用谷歌图表。
问题是,当我计数并联接表时,当两个表的日期不同时,数据就不显示了。
例如,我有这样的数据。
表1

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

表2

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>
a6b3iqyw

a6b3iqyw1#

这个呢:

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

另外,请不要将日期字段命名为“日期”。这是个保留字。。。您不想对字段名使用保留字!这会管用的,别误会,但这是非常非常糟糕的做法!

um6iljoc

um6iljoc2#

使用 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

相关问题