[英]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.