2013-07-01 70 views
3

我有一个电话呼叫数据库,它有一个字段'方向',在呼叫发出方向(进入或退出)后被正确命名。我的问题是,当我搜索“in”或“out”呼叫时,这个数字是完全错误的。MySQL查询错误计数

实施例:
对于五月,
TOTAL呼叫(IN + OUT):13622
IN呼叫:12637个
OUT呼叫:985

SELECT `start`, `direction`, `ref_id` 
FROM `call_list` 
WHERE `did` = 'xxxx' 
AND `start` >= '2013-05-01 00:00:00' 
AND `start` < '2013-06-01 00:00:00' 

上面是一个准确的计数基于将上述查询转储到CSV并实际查看列表。然而,当我在“方向”搜索添加,返回的数字是完全关闭:

SELECT `start`, `direction`, `ref_id` 
FROM `call_list` 
WHERE `did` = 'xxxx' 
AND `start` >= '2013-05-01 00:00:00' 
AND `start` < '2013-06-01 00:00:00' 
AND `direction` = 'In' 

...将导致13461总计数,并

SELECT `start`, `direction`, `ref_id` 
FROM `call_list` 
WHERE `did` = 'xxxx' 
AND `start` >= '2013-05-01 00:00:00' 
AND `start` < '2013-06-01 00:00:00' 
AND `direction` = 'Out' 

..yields一的11018.

总数因此,如果我组:

SELECT `direction`, count(*) 
FROM `call_list` 
WHERE `did` = 'xxxx' 
AND `start` >= '2013-05-01 00:00:00' 
AND `start` < '2013-06-01 00:00:00' 
GROUP BY `direction` 

...我得到正确的计数每一个是一切都很好,除了有时我需要分别在'In'或'Out'计数上运行查询,所以我的数字是关闭的。

'方向'列是varchar(3)utf8_unicode_ci。

如果有人可以说明为什么我收到bum count数字,我真的很感激它。

在此先感谢

+1

你有记录,其中方向为空? – Aguardientico

+0

nope,只有'In'和'Out' – JBarnes

+0

你可以制作一个SQL小提琴吗? – exussum

回答

2

胡乱猜测,但得到的更多或更少的行你WHERE条件语句使用OR总比预期没有适当的括号

例如常见原因之一

SELECT `start`, `direction`, `ref_id` 
    FROM `call_list` 
WHERE `did` = 'xxxx' OR `did` = 'yyyy' -- << here is the problem !!! 
    AND `start` >= '2013-05-01 00:00:00' 
    AND `start` < '2013-06-01 00:00:00' 
    AND `direction` = 'In' 

,应该是

SELECT `start`, `direction`, `ref_id` 
    FROM `call_list` 
WHERE (`did` = 'xxxx' OR `did` = 'yyyy') 
    AND `start` >= '2013-05-01 00:00:00' 
    AND `start` < '2013-06-01 00:00:00' 
    AND `direction` = 'In' 

这里是SQLFiddle演示

+0

哇,你是绝对正确的。我不相信我错过了那一个。我有一个foreach查询,我正在看的那个有多个没有尾随或括号的值,但是我只用一个值做了手动搜索。非常感谢你的帮助! – JBarnes

+0

@JonCAMS你非常欢迎:)顺便说一句,你可能会考虑使用'IN()'而不是像'...'这样的多个'OR's。('xxxx','yyyy',...)'。它可能会简化你的生活。 – peterm