Php 如果当天没有结果,MySQL查询得到0
我在flot中创建一个折线图,除了那些没有结果的日子,我需要它们返回结果0+日期。这在mysql中可能吗?以下是我当前的查询: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 $
$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;