Php 如果当天没有结果,MySQL查询得到0

Php 如果当天没有结果,MySQL查询得到0,php,mysql,flot,Php,Mysql,Flot,我在flot中创建一个折线图,除了那些没有结果的日子,我需要它们返回结果0+日期。这在mysql中可能吗?以下是我当前的查询: $chartQuery = "SELECT count(date) as counted_leads, UNIX_TIMESTAMP(date) as time FROM enquiries WHERE visibility != 'deleted' group by date"; 或者我需要在我的php中完成它?这是我的密码: <?php $

我在flot中创建一个折线图,除了那些没有结果的日子,我需要它们返回结果0+日期。这在mysql中可能吗?以下是我当前的查询:

$chartQuery = "SELECT count(date) as counted_leads, UNIX_TIMESTAMP(date) as time FROM enquiries WHERE visibility != 'deleted' group by date";
或者我需要在我的php中完成它?这是我的密码:

<?php 
        $last_key = end(array_keys($chartResults));
        foreach ($chartResults as $item => $value)
        {
            $timestamp = round($value['time'] * 1000);

            if ($item == $last_key)
            {
                // last element
                echo '['.$timestamp.', '.htmlentities($value['counted_leads']).']';
            }
            else 
            {
                // not last element
                echo '['.$timestamp.', '.htmlentities($value['counted_leads']).'],';
            }
        }
        unset($value);
        ?>


如果为默认值使用if null

我想这就是您想要的:

SELECT time, SUM(counted_leads) AS counted_leads
FROM(
        SELECT UNIX_TIMESTAMP(date) AS time, count(1) AS counted_leads
        FROM enquiries
        WHERE visibility != 'deleted'
        GROUP BY time

        UNION ALL

        SELECT a.Date AS time, 0 AS counted_leads
        FROM (
            SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date
            FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
            CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
            CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
        ) a
        WHERE a.Date BETWEEN (SELECT MIN(date) FROM enquiries) AND (SELECT MAX(date) FROM enquiries)
) a
GROUP BY time;

您可以在日期/时间表上加入,但在PHP中加入实际上可能更容易。我已经更新了我的帖子,请尝试一下。如果您的查询没有返回任何行,你会使用什么日期?我想通过日历月的数组,如果有天的话循环,但这似乎有点太多tbh?我已经添加了这个,但它似乎没有传回0行?尝试直接在UNION ALL中的服务器上执行单个查询。我不熟悉UNION ALL语法?我该如何执行呢?里面有两个查询,请逐个执行,然后查看单个查询的输出。
SELECT time, SUM(counted_leads) AS counted_leads
FROM(
        SELECT UNIX_TIMESTAMP(date) AS time, count(1) AS counted_leads
        FROM enquiries
        WHERE visibility != 'deleted'
        GROUP BY time

        UNION ALL

        SELECT a.Date AS time, 0 AS counted_leads
        FROM (
            SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date
            FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
            CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
            CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
        ) a
        WHERE a.Date BETWEEN (SELECT MIN(date) FROM enquiries) AND (SELECT MAX(date) FROM enquiries)
) a
GROUP BY time;