Запрос MySQL получает 0, если нет результата за день


Я создаю линейный график в 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);
        ?>
Author: neoszion, 2012-07-30

2 answers

Я думаю, что это то, что вы ищете:

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;
 0
Author: Omesh, 2012-07-30 06:03:35
SELECT 
     ifnull(count(date),0) as counted_leads, 
     UNIX_TIMESTAMP(date) as time 
FROM enquiries WHERE visibility != 'deleted' 
group by date

Используйте значение if null для значения по умолчанию

 2
Author: Muhammad Raheel, 2012-07-30 05:55:32