繁体   English   中英

mySql 返回不正确的结果

[英]mySql returning incorrect results

我有一个查询

SELECT date, SUM(cimpression) AS cimp, SUM(cclick) AS cclick 
FROM stdaily 
WHERE date BETWEEN :start AND :end 
AND (id = 21 AND id = 32 AND id = 12 AND id = 33)
GROUP BY date
ORDER BY date ASC;

此查询只需要返回 id 等于 21、32、12 和 33 的结果,但返回不包含这些特定 ID 的结果,不确定到底是什么问题? 有什么建议吗?

我认为您正在寻找的是:

SELECT date,SUM(cimpression) AS cimp, SUM(cclick) AS cclick
FROM stdaily
WHERE date BETWEEN :start AND :end 
AND id in (21, 32, 12, 33) 
GROUP BY date 
ORDER BY date ASC;

这将返回结果,其 id in括号中包含的任何结果相同。

您的查询不正确,因为 ID 不能同时包含所有这些值:

id = 21 AND id = 32 AND id = 12 AND id = 33 

前面的条件不成立,结果是NULL。

尝试这个:

id = 21 OR id = 32 OR id = 12 OR id = 33 
id = 21 AND id = 32 AND id = 12 AND id = 33 

应该

id = 21 OR id = 32 OR id = 12 OR id = 33 

您没有指定他应该在哪里检查这些 id,并且您传递 id 的方式也是错误的

WHERE date BETWEEN :start AND :end AND (id = 21 AND id = 32 AND id = 12 AND id = 33 )

它应该是这样的:

SELECT date,SUM(cimpression) AS cimp,SUM(cclick) AS cclick 
FROM stdaily 
WHERE date BETWEEN :start AND :end AND id IN (21, 32, 12, 33 ) 
GROUP BY date 
ORDER BY date ASC

我不知道您的数据是如何构造的,但我很惊讶这会返回任何结果。 id 怎么可能同时是 21 和 32? 例如,如果我使用

SELECT * FROM users WHERE 1=1 AND (id = 10 AND id = 11);

即使有 id 为 10 和 11 的用户,我也不会得到结果。

您应该使用 OR 或更好的 IN(21,32,12,33)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM