2014-12-13 67 views
0

所以也许这是由于睡眠不足,但我有一个重大的脑功能障碍,并不记得这里发生了什么问题。这里是我的发言:Mysql Select语句不起作用

SELECT DISTINCT `county`, COUNT(*) 
FROM `ips` 
WHERE `county` != 'NULL' AND `county` != '' AND 
EXISTS (SELECT * FROM `pages` 
WHERE (`timestamp` BETWEEN FROM_UNIXTIME(?) AND FROM_UNIXTIME(?))) 
GROUP BY `county` 

我期待的结果是这样的:

County | Number 
Some county | 42 
Other county | 27 

我的页表中有每个页面被用户观看时的时间戳,所以如果他们查看日期之间的一个页面,选择IP表中的县,并将该县的总数填入数字中。我正在使用PDO,并且我在两次传球中使用了strtotime()

我目前被卡住了。所有的帮助都受到了重视。希望这不是我忽略的一些愚蠢的小错误。

+1

你的输出是什么? – rjv 2014-12-13 06:52:38

+0

我收到一个空集。时间戳是正确的。我使用一年前至今,并有成千上万的行。我错过了什么,或者做错了什么。我只是不确定。 – user1464971 2014-12-13 06:54:24

+0

'NULL'不等于**任何**(包括另一个'NULL')。 – 2014-12-13 06:55:29

回答

1

您无法将null与!=进行比较,您需要使用的不是null。

SELECT `county`, COUNT(*) 
FROM `ips` 
WHERE `county` IS NOT NULL AND `county` != '' AND 
EXISTS (SELECT 1 FROM `pages` 
     WHERE (`timestamp` BETWEEN FROM_UNIXTIME(?) AND FROM_UNIXTIME(?))) 
GROUP BY `county` 
+0

当'GROUP'ed'BY'相同时,'DISTINCT'几乎不需要。 – 2014-12-13 06:54:43

+0

是的你是对的。这不是必需的。 – SMA 2014-12-13 06:55:18

+0

再一次:在'EXISTS'查询中,输出任何字段没有任何意义'EXISTS(SELECT 1 FROM ...)'就足够了。 – 2014-12-13 06:57:32