2016-02-10 236 views
0

此查询应该选择一些统计值形成一个表:的MySQL则返回0查询为空

(SELECT MAX(`id`) as `count` FROM `stats` LIMIT 1) 
UNION (SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 1 DAY) LIMIT 1) 
UNION (SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 7 DAY) LIMIT 1) 
UNION (SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 30 DAY) LIMIT 1) 
UNION (SELECT DATE_FORMAT(MIN(`time`), '%D of %M, %Y') as `count` FROM `stats` LIMIT 1) 

我尝试这样做,但它不工作

(SELECT MAX(`id`) as `count` FROM `stats` LIMIT 1) 
UNION IFNULL((SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 1 DAY) LIMIT 1), '0') 
UNION IFNULL((SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 7 DAY) LIMIT 1), '0') 
UNION IFNULL((SELECT COUNT(*) as `count` FROM `stats` WHERE DATE(`time`) >= (NOW() - INTERVAL 30 DAY) LIMIT 1), '0') 
UNION IFNULL((SELECT DATE_FORMAT(MIN(`time`), '%D of %M, %Y') as `count` FROM `stats` LIMIT 1), '0') 
+0

什么意思dosen't工作..错误。?错误的结果? .. – scaisEdge

+0

它返回一个错误,'#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'IFNULL((SELECT COUNT(*)'作为\'count \'FROM \'stats \''WHERE DATE(\'time \')> = NOW() - 我在第2行' –

回答

0

你要做SELECTIFNULL

SELECT MAX(`id`) as `count` FROM `stats` LIMIT 1 
UNION 
SELECT IFNULL((SELECT COUNT(*) as `count` 
       FROM `stats` 
       WHERE DATE(`time`) >= (NOW() - INTERVAL 1 DAY) LIMIT 1), 0) 
UNION 
SELECT IFNULL((SELECT COUNT(*) as `count` 
       FROM `stats` 
       WHERE DATE(`time`) >= (NOW() - INTERVAL 7 DAY) LIMIT 1), 0) 
UNION 
SELECT IFNULL((SELECT COUNT(*) as `count` 
       FROM `stats` 
       WHERE DATE(`time`) >= (NOW() - INTERVAL 30 DAY) LIMIT 1), 0) 
UNION 
SELECT IFNULL((SELECT DATE_FORMAT(MIN(`time`), '%D of %M, %Y') as `count` 
       FROM `stats` LIMIT 1), 0) 

您还可以使用0,而不是 '0',并得到摆脱围绕第一个查询的括号。

+0

这非常有帮助,非常感谢! –